在 Linux 的默认策略中,当物理内存被完全耗尽后,系统才会触发 OOM Killer 操作,这通常会导致系统变得非常缓慢甚至完全无响应。对此,我们通过启用虚拟内存和 EarlyOOM 的方式优化系统的内存行为。
温馨提示:本教程配套操作视频,教程视频中文本均可直接从视频中复制,请放心食用。
启用虚拟内存(swap)
首先,我们查看一下系统已经启用的物理内存和虚拟内存。
在终端执行:
free -h
BashMem
代表物理内存,Swap
代表虚拟内存。
下面是 RedHat 推荐的虚拟内存大小表(在本地硬盘容量充足的情况下):
物理内存大小 | 推荐的虚拟内存大小 | 如果启用休眠,推荐的虚拟内存大小 |
< 2GB | 2 倍物理内存 | 3 倍物理内存 |
2GB - 8GB | 与物理内存相同 | 2 倍物理内存 |
8GB - 64GB | 至少 4GB | 1.5 倍物理内存 |
> 64GB | 至少 4GB | (不推荐启用休眠) |
你可以根据自己的机器情况选择需要的虚拟内存大小。
下一步,我们来创建虚拟内存文件并启用,在终端执行(请将虚拟内存大小更改为你需要的大小):
sudo dd if=/dev/zero of=/swapfile bs=1M count=<虚拟内存大小(单位:M,1G=1000M)>
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Bash默认情况下,Linux 不会自动在开机时自动挂载虚拟内存文件,为此,请使用你熟悉的文本编辑器编辑 /etc/fstab
,并在文件末尾添加:
/swapfile swap swap defaults 0 0
Bash安装并启用 EarlyOOM
EarlyOOM 可以在内存占用超过 90%(可更改设置)时提前触发 OOM Killer,杀死内存占用过大的进程,以防止内存完全耗尽后造成系统无响应。
对于 Debian 系列(Debian、Ubuntu),在终端执行:
sudo apt install earlyoom
sudo systemctl enable --now
Bash