是否可以为由Vagrant管理的Linux来宾VM创建交换文件?


8

Vagrantfile定义了以下提供程序:

Vagrantfile摘录:

config.vm.provider :virtualbox do |vb|
  vb.gui = false
  vb.customize ["modifyvm", :id, "--memory", "4096"]
end

free -m创建的VM中运行时,我会看到以下报告:

             total       used       free     shared    buffers     cached
Mem:          3953        337       3615          0         18        119
-/+ buffers/cache:        199       3753
Swap:            0          0          0

在构建和配置VM时是否可以分配swappiness?

我已经尝试设置vm.swappiness/etc/sysctl.conf并重新启动虚拟机,但我没有看到添加交换空间的VM的任何影响。

为什么需要交换空间?我宁愿根本不处理交换空间并在内存中运行所有内容。但是,对于某些应用程序(例如,PHP的composer项目)在某些条件下使用大量内存而臭名昭著。如果没有交换空间,那么如果我有交换空间,我必须非常自由地分配给VM的内存量-尽管它可能不那么有效-从理论上讲,我会遇到更少的问题。

Answers:


4

您看到的内存设置仅用于配置VM的RAM。但是,交换空间定义是磁盘映像的一部分。此图片是config.vm.box定义中的一部分Vagrantfile。在我的特定情况下,我注意到交换空间无法轻松地重新配置(我只有1 GB的交换空间)。

你的情况我建议改变基本图像(config.vm.box),或通过例如集成交换文件添加到您的根文件系统这个脚本到你Vagrantfile是另一个似乎值得尝试的链接。


谢谢,我有点想过,在我进一步查看之后,必须修改基础映像的交换。事实证明,我可以通过在程序上使用需要大量内存的不同操作来解决问题。除了修改基本映像外,似乎没有其他解决方案。
肖恩·奎因

链接脚本(第一个)对我来说很好用。万一链接变得过时了:create_swap.shremove_swap.sh作为原始
要点

12

只需将此行添加到您的流浪文件中

流浪文件

 # Enable Dynamic Swap Space to prevent Out of Memory crashes
config.vm.provision "shell", inline: "sudo apt install swapspace -y"

然后重新配置

vagrant up --provision

怎么运行的

这是一个动态交换空间守护程序。有几个,但这里很受欢迎。

sudo apt install swapspace

验证它是否正在运行

sudo service swapspace status

摘录自http://pqxx.org/development/swapspace/

这个用于Linux内核的系统守护程序旨在消除对大型固定交换分区或交换文件的需求。

在使用Swapspace安装基于Linux的系统(始终为GNU / Linux)时,可以省略通常的交换分区,或者可以将其保持很小。每当Swapspace在正常系统使用期间发现需要更多虚拟内存时,它将自动从硬盘上占用空间。相反,不再需要的交换空间又被释放以供文件系统常规使用。

这意味着在安装了Swapspace的情况下,在安装过程中调整系统的可用交换空间不再是一个生死攸关的选择。现在,仅在单个大分区上运行GNU / Linux变得可行,而不会因令人遗憾的安装选择而丢失磁盘空间。该系统还应该能够处理偶尔占用大量内存的任务,该任务占用的交换空间比最初预期的要多得多,而在正常操作期间不会像往常一样保留相同的交换空间未使用和不可用。


0

如果您使用Chef来配置您的Vagrant框,则最简单的解决方案可能是使用swap_file资源。此资源是Chef 14.0中的新增资源。

例如,将以下内容添加到您的食谱中:

swap_file '/var/swap.1' do
  size 1024
end
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.