linux 线程中断 消失排查

Scroll Down

现象

在linux系统中,线程“莫名消失”,或者重启(使用systemd服务)

可能是linux内存不足,自动把内存占用过高的线程当流氓线程处理(kill),导致线程中断、消失。

排查过程

先查询当前服务器是否内存情况。

free -h

以下命令可以查询系统kill掉日志

当天日志: egrep -i 'killed process' /var/log/messages

全部日志: egrep -i -r 'killed process' /var/log

如果出现记录,则可以确定系统自动kill过线程。

解决方案

1、 优化程序,减少内存占用。 2、 增加服务器内存。(当我没说 🙄️) 3、 增加 swap 分区(参考 CentOS 添加Swap空间) 4、 修改/proc/sys/vm/overcommit_memory设置,kernel 文档

简单介绍
0: heuristic overcommit (this is the default)
1: always overcommit, never check
2: always check, never overcommit
  • 为0时:启发式oom,即当申请的虚拟内存不是很夸张的大于物理内存,则系统允许申请,但是当进程申请的虚拟内存很夸张的大于物理内存,则就会产生 OOM。
  • 为1时:全部允许overmemory内存申请,不管你多大的虚拟内存申请都允许,当系统内存耗尽时,才会产生oom。
  • 为2时:不能超出限定额的内存申请,(/proc/sys/vm/overcommit_ratio,默认50%),如果超出限制,产生oom
设置方法
vim /etc/sysctl.conf
vm.overcommit_memory = 1
使配置生效
sysctl -p

END