是否可以为 Vagrant 管理的 Linux 客户虚拟机创建交换文件?

是否可以为 Vagrant 管理的 Linux 客户虚拟机创建交换文件?

在我的系统中,Vagrantfile我定义了以下提供程序:

摘自 Vagrantfile:

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

当我在创建的虚拟机中运行时free -m,我看到以下报告:

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

在构建和配置虚拟机时是否可以分配交换功能?

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

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

答案1

您看到的内存设置仅用于配置虚拟机的 RAM。但是,交换空间定义是磁盘映像的一部分。此映像作为定义的一部分提供给您config.vm.boxVagrantfile在我的特定情况下,我注意到交换空间无法轻松重新配置(我只有 1 GB 的交换空间)。

对于你的情况,我建议更改基础镜像(config.vm.box),或者通过集成将交换文件添加到你的根文件系统这个脚本进入你的Vagrantfile是另一个值得尝试的链接。

答案2

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

Vagrant文​​件

 # 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 就变得切实可行了——不会因为令人遗憾的安装选择而浪费磁盘空间。系统还应该能够处理偶尔占用大量内存的任务,这些任务占用的交换空间比最初预计的多得多,而不会像通常情况那样在正常运行期间留下相同的交换空间闲置和不可用。

答案3

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

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

swap_file '/var/swap.1' do
  size 1024
end

相关内容