# cat /var/log/messages
Out of memory: Kill process 22667(mongod) score 238 or sacrifice child
“内存不足:终止进程 22667(mongod),得分 238 或牺牲子进程。”
这个消息表示系统内存不足,Linux 内核选择终止一个进程以释放内存。
这条日志表明系统的内存资源已经耗尽,内核使用 OOM (Out Of Memory) 处理机制来决定终止一个进程以回收内存。
在你的例子中,进程 mongod
(MongoDB 的守护进程)被终止,因为它的“得分”较高,意味着它在资源使用上的影响较大。
你可以检查系统日志(如 /var/log/syslog
或 /var/log/messages
),以获得更多关于内存使用情况和具体事件的详细信息。这通常包括内存消耗大的进程、触发 OOM 的时间点以及内核的决策过程。
在这个上下文中,“score 238” 是一个内存管理的打分机制,内核使用这个分数来决定哪个进程应该被终止。
得分越高,表示该进程在内存消耗方面的影响越大。
这个分数是根据多个因素计算的,如进程的内存使用量、运行时间、对系统的影响等。内核通过比较各个进程的分数来决定哪个进程优先被终止,以尽量减小系统的整体负担。
如何禁止进程被 OOM 杀掉 ?
有时候,我们不希望某些进程被 OOM killer 杀掉。
例如 MySQL 进程如果被 OOM killer 杀掉的话,那么可能导致数据丢失的情况。
那么如何防止进程被 OOM killer 杀掉呢?
从上面的分析可知,在内核计算进程最坏分数值时,会加上进程的 oom_score_adj(OOM建议值)值。
如果将此值设置为 -1000 时,那么系统将会禁止 OOM killer 杀死此进程。
例如使用如下命令,将会禁止杀死 pid为 2000 的进程:
# echo -1000 > /proc/2000/oom_score_adj
这样,我们就能防止一些重要的进程被 OOM killer 杀掉了!
/proc/{pid}/oom_score_adj
是一个文件,用于调整进程在内存不足时被终止的优先级。
{pid}
是进程的 ID。这个文件中的值范围从 -1000 到 1000,影响 OOM(Out Of Memory)处理机制中的进程得分:
- -1000:几乎不会被终止,优先级最低。
- 0:默认值,正常优先级。
- 1000:最有可能被终止,优先级最高。
值越高,进程在内存不足时被终止的可能性越大。调整这个值可以帮助你控制在内存紧张时哪些进程更容易被杀死。
参考
如何理解Linux中的OOM(Out Of Memory Killer)机制?
https://www.jianshu.com/p/3049179568ac