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

本文讲述了如何通过dmesg和系统日志追踪Linux下进程因内存消耗过大被内核的OOM killer杀死,重点分析了内存使用情况,找出问题根源,并介绍了OOM killer的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

通过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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

trigger333

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值