Linux系统下查看被杀死进程的信息

 

通过dmesg 命令分析原因

软件在运行时显示 进程被杀死,首先通过命令查看被杀死的进程的情况

dmesg | egrep -i -B100 'killed process'

显示,在被杀死的时候该进程占用的内存

[22588.717326] Killed process 8163 (XXX进程)

total-vm:5 826 324kB,

anon-rss:5 454 392kB,

file-rss:4kB,

shmem-rss:0kB

进程号:8163

total-vm:total virtual memory. 进程使用的总的虚拟内存

rss: resident set size. 驻留集大小。驻留集是指进程已装入内存的页面的集合。

anon-rss:anonymous rss. 匿名驻留集。比如malloc出来的就是匿名的。

可以看到该进程占用内存过大,达到了5G多,被杀死的原因是 outofmemory,debug定位到具体的函数,最后发现是一个链表没有被回收,在一个循环中不断的被追加,导致内存溢出。

其他命令

Linux 内核有个机制叫OOM killer(Out Of Memory killer),该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉。内核检测到系统内存不足、挑选并杀掉某个进程的过程可以参考内核源代码linux/mm/oom_kill.c,当系统内存不足的时候,out_of_memory()被触发,然后调用select_bad_process()选择一个”bad”进程杀掉。

 

查看系统日志同样可以查看被杀死进程的状态。

egrep -i -r 'killed process' /var/log

你可能感兴趣的:(Linux,linux,运维)