这段时间发现一个python的服务实例经常静默退出,从应用日志里未找到任何异常现场,一切都很正常。

怎么办呢,首先想到的就是完善日志,应用启动入口try住,捕获BaseException异常进行输出,打包上线。

什么,又退出了,看看解释器层面有没有日志,Oh no,这不是JVM,没找到Python解释器层面有任何日志记录,鄙视Python。

无奈,从linux系统日志排查,终于在/var/log/messages发现了问题:
1543223773953

从日志中发现,内核启用了OOM killer机制,该机器总共剩余空闲物理内存16G,此时rss(物理内存)占用14G。而且通常情况下,该应用不会消耗这么大的内存,肯定是那边有泄漏的情况。

检查该服务实例上所有运行的业务,果然有一个业务代码存在问题。

OOM killer是Linux内核提供的一种机制,防止某些进程消耗尽物理内存,在必要时根据oom_score(/proc//oom_score)值对进程进行kill。