进程挂了报错OOM Killer解决方式

没事开服务器看日志,发现进程被干掉了orz

1
2
3
4
Squid Parent: squid-1 process 518 exited due to signal 9 with status 0
Mar 29 14:09:31 vfhk systemd[1]: squid.service: A process of this unit has been killed by the OOM killer.
Mar 29 14:09:34 vfhk squid[514]: Removing PID file (/run/squid.pid)
Mar 29 14:09:40 vfhk systemd[1]: squid.service: Failed with result 'oom-kill'.

google检索了一下解决方案记录一下,oom killer是Linux内核的一个内存回收机制,在内存不足的情况下会kill掉内存占用较大的进程,oom killer会综合内存消耗量、cpu时间,存活时间对每个进程打分,根据内存消耗越多分越高,存活时间越长分越低,枪打出头鸟,优先kill掉分数高的进程,而解决业务进程被kill掉的方法除了扩大内存配置,增加swap,还可以通过修改进程的分数到负数,避免被oom干掉,或者把oom关掉。

方法一 调高进程分数

1
2
3
4
5
6
7
8
9
10
11
ps -ef | grep 进程名  //查看需要调整的进程id

echo -100 > /proc/进程id/oom_score_adj //调整相关进程的oom分数

vim /usr/lib/systemd/system/进程名.service
···
[Service]
OOMScoreAdjust=-100 //把调整oom分数的参数写入进程服务内

systemctl daemon-reload //重置服务配置
systemctl restart 进程名 //重启进程

方法二 关掉OOM killer

1
2
3
4
sysctl -w vm.overcommit_memory=2 //临时调整内核参数关闭

echo "vm.overcommit_memory=2" >> /etc/sysctl.conf //写入配置到内核参数文件
sysctl -p //应用配置

进程挂了报错OOM Killer解决方式

http://vv.sb/2022/03/29/进程报错OOM-Killer/

作者

yunyunyun

发布于

2022-03-29

更新于

2022-03-29

许可协议

评论

You forgot to set the shortname for Disqus. Please set it in _config.yml.