oom就是out of memory, 意思就是内存用完了(内存泄漏可能导致这种现象)。 在linux中, 如果linux机器的内存用完了, 会怎样呢? 很显然, 系统肯定无法正常工作。 linux当然要考虑这种问题, linux会杀死占用内存很大的进程(这些进程后续可能被重新拉取), 从而释放出一些内存, 来保证整个系统的的正常运行, 这就是linux oom-killer的机制。
在oom期间, 系统经常会遇到一些莫名其妙的异常, 这是能理解的, 因为内存吃紧啊。 过一会儿, 经历oom-killer后, 系统又暂时恢复正常了, 待到下次内存泄漏积累到一定阶段, 再次出现oom时, 系统又异常。 这种现象是很常见的, 如果不了解oom和oom-killer, 则不太容易查到问题的原因, 那么这种每周偶尔出现一次异常, 过会又自动好了的问题,非常蛋疼。
我以前也很少直接处理oom问题, 最近遇到了, 所以来学习和总结一下。
那么, 怎么查看oom信息呢? 我们可以查看/proc/kmsg这个内核信息, 如下: cat /proc/kmsg
......
<3>[892868.841317] Out of memory: Kill process 19174 (vidc_static_age) score 10 or sacrifice child
<3>[892868.841320] Killed process 19174 (vidc_static_age) total-vm:306876kB, anon-rss:169200kB, file