OOM是什么?

OOMOut of Memory (内存不足)的简称。

通常,它会在宿主的可用内存不足时发生,并触发 Linux 内核底层的 killer 机制。

解决建议

在一般情况下,我们通过创建虚拟交换空间以解决此类问题。

但请注意,若你准备的虚拟内存物理映射文件或分区使用的物理设备的IOPS性能较差,将可能影响你整机的运行速度。

若你对整机速度或稳定性的要求较高,则不必继续阅读,请使用物理方式,例如加装内存条以解决该问题。

创建虚拟交换空间及应用

这里使用文件形式以作为虚拟交换文件。

dd if=/dev/zero bs=1M count=1000 of=/swap1g # Create empty file
mkswap /swap1g # init
chmod 0600 /swap1g # for security
swapon /swap1g # Enable swapfileCode language: PHP (php)

注意,若宿主运行的内核或虚拟服务器提供商没有在内核中启用该功能,你可能无法通过上述命令完成。

警告,虽然这是一个相对中性的解决方法,你仍不应将该虚拟交换空间的大小设置过大,无论是使用何种基于物理设备的虚拟交换空间方式,除非你对你的物理设备的IOPS性能相当自信。

提示,以文件形式映射并非唯一方法。

如何自动应用该虚拟交换空间

将虚拟交换空间写入文件系统表(fstab)

echo "/swap1g swap swap defaults 0 0" >> /etc/fstabCode language: JavaScript (javascript)

限制使用虚拟交换空间的权重比例

一般情况下,宿主自带的物理内存响应速度要比映射的虚拟内存快得多。

为避免可能导致的性能损耗,建议对其设置最小比例。

echo "vm.swappiness=1" >> /etc/sysctl.conf # Write conf file
sysctl -p # ApplyCode language: PHP (php)

完成

经过上述操作后,你的系统应会减少出现oom的情况。


0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据