linux

【Linux】Out of memory: Kill proce

2024-09-08  本文已影响0人  Bogon
#  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)处理机制中的进程得分:

值越高,进程在内存不足时被终止的可能性越大。调整这个值可以帮助你控制在内存紧张时哪些进程更容易被杀死。

参考

如何理解Linux中的OOM(Out Of Memory Killer)机制?
https://www.jianshu.com/p/3049179568ac

上一篇下一篇

猜你喜欢

热点阅读