发表人:wzb 2023-11-08 16:38:25 最新回复: 2023-11-08 16:38:25
有时我们的进程被系统终止,通过dmesg来查看系统日志,有Killed process等这样信息。
当linux检测到系统内存不足,会触发Linux 内核机制(OOM killer),挑选并杀掉某个进程(未设置系统重启选项),OOM是Out of Memory。Linux下每个进程都有一个OOM权重,在/proc/<pid>/oom_adj里面,取值是-17到+15(为-17此进程不会被杀掉),取值越高,越容易被杀掉。最终OOM-Killer是通过/proc/<pid>/oom_score这个值来决定哪个进程被杀死。这个值是系统综合进程的内存消耗量、CPU时间、存活时间和oom_adj计算出的,消耗内存越多oom_score值越高,存活时间越长值越低。
Linux在计算进程的内存消耗的时候,会将子进程所耗内存的一半算到父进程中。OOM-Killer策略是:损失最少的工作,释放最大的内存;同时不伤及无辜的用了很大内存的进程,并且杀掉的进程数尽量少。
如下是某节点的dmesg输出的部分信息,

从系统日志中可以看出,由于当时系统中的进程使用内存过多,pslsnr、thjob等进程OOM的分数比较高,占用了几十GB、上百GB的内存,被系统kill了。