在我的系统中,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
答案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