穷人的supervisor OOM killer

厂里的docker上跑了个supervisord,用来把挂掉的进程拉起来。最近的问题不是进程挂掉,而是内存泄漏

跑着跑着内存爆了,然后宿主机OOM随机杀掉一个进程,结果占用内存最大的那个还活着,正常的进程反而gg,该漏的继续漏,然后反复OOM。想看下哪里漏了,--cap-add=SYS_PTRACE 也不给加,OOM策略也不给调,思来想去只能自己做防水补漏了。做起来也简单,supervisor再跑一套bash脚本即可:

while true; do
  p=`ps --no-headers  -xo rss,pid --sort=-rss | awk '{
    if($1 > 1000000){ print $2 }
  }'`
  kill $p 2>/dev/null || echo "everything fine";
  sleep 60;
done;

1000000 代表1G 内存。 sleep 60 表示 每60秒检查一次。

Comments