OOM Killer 终止进程
OOM Killer 是 Linux 内核的一个组件,在内存耗尽时会自动终止服务器上的某些进程,以释放 RAM。释放出的内存归还给操作系统内核,随后可以分配给其他内存不足的进程。
OOM Killer 按照一定的规则选择要终止的进程。它首先关注最近启动、占用大量内存和/或拥有许多子进程的用户进程。最后才会终止 root 用户下已长时间运行的系统进程。
但需要注意的是,OOM Killer 使用 SIGKILL 信号终止进程,进程无法正常退出并保存数据。如果 OOM Killer 触发过于频繁,可能会导致系统运行出现严重问题。
OOM Killer 被触发时该怎么办
- 如果您发现 OOM Killer 只在高负载时触发(例如在优化服务器期间),可以暂时关闭杀毒软件。这样可以释放部分内存,使必要的进程顺利完成。不过,这会降低服务器的安全性,因此请谨慎使用此方法,并且只能临时使用。
- 如果 OOM Killer 经常被触发,需要分析服务器、数据库和网站的运行情况,并对其进行优化,从根本上解决问题。
- 如果服务器已经优化过,但内存仍然不足,请考虑增加内存容量,或升级到内存更大的套餐(请参阅套餐和配置信息)。
- 您还可以为特定进程设置优先级,防止其被 OOM Killer 终止。优先级在 /proc/$PID/oom_adj 文件中设置,该文件在每个进程启动时创建。要设置优先级,请先查出目标进程的 PID,然后执行以下命令:
echo -17 > /proc/PROCESS_PID/oom_adj
也可以使用进程名称,例如针对 sshd 进程:
pgrep -f "/usr/sbin/sshd" | while read PID; do echo -17 > /proc/$PID/oom_adj; done
此处设置的优先级为 -17。更安全的做法是使用 -15 优先级,这样只有在极端情况下 OOM Killer 才会终止该进程,从而避免系统出现严重故障。