Linux进程突然被杀掉(OOM killer),查看系统日志

Linux进程突然被杀掉(OOM killer),查看系统日志,第1张

一个命令:

这个命令需前羡要用户处于root权限才能看,执行之后可以看到:

简单说一下:

total-vm就是进程使用的虚拟内存大小,其中部分内容映射到RAM本身,也就是主存,被分配和使用也就成了RSS。

部分RSS在实际内存块里面分慧岩拍配,成了anon-rss,叫做匿名内存。还有映射到设备和文件的RSS内存卡,叫做file-rss。

比如说:

你用vim指令打开一个巨大的文件,那么file-rss将会很高。

如果枣型你用malloc()动态分配很大部分的内存,并且真的使用了它,那么anon-rss也会很高。

但是!!如果你使用malloc()分配了大量的内存,但是不去用它!那么total-vm将会变得更高,但是因为内存过量使用,不会使用真正的内存,那么rss值会很低。

可以看到上述信息,发现进程被杀掉了。

那么杀掉它的原因是什么呢?

首先确定,当报出OOM的时候,系统的内存已经不足了,于是linux会决定杀掉进程,但是linux采用的策略并非是杀掉最占用内存的进程(Android是这样)。

linux会给每个进程评分:oom_score

根据这个评分去kill,决定这个分数的因素除了内存占用大小之外,还有内存增加的速率,比如说kylin,当执行Task构建Cube的时候,内存的占用会突然爆发式增长!发现这时候的分数老高了!然后就把它kill了。

http://www.wowotech.net/memory_management/oom.html

https://stackoverflow.com/questions/18845857/what-does-anon-rss-and-total-vm-mean

交叉编译出来的文件在目标机上无法运行大姿枣斗多由两个原因造成: 1 交叉编译工具链与目标机架构不匹配岩带,也就是选错了编译工具; 2 缺少依赖库迹磨,这种情况可使用ldd命令查看依赖项,检查一下是否缺少依赖库文件

OS:cent os 6.5

日志路径:/var/log/messages

服务器上跑的一个程序,发现报了Killed。查看/var/log/messages里的日志,发现以下报错:

[plain] view plain copy

Aug 11 16:28:11 kernel: Out of memory: Kill process 3080 (forward) score 559 or sacrifice child

Aug 11 16:28:11 kernel: Killed process 3080, UID 0, (forward) total-vm:1429064kB, anon-rss:1130444kB, file-rss:136kB

原来linux下也有内存OOM的处理,不同于android 杀掉报OOM的进程,linux是杀掉当前最占用内存的进程。

当Linux报OOM时,意味着整个系统的内存已经不足,如果不杀死进程的话,就会导致系统缓衫扮的崩塌悔溃。每个进程都会存有一个oom_score的参数,比如输出pid为扰灶988的oom_score:

[plain] view plain copy

cat /proc/988/oom_score

OOM Killer 会在系统报OOM的时候,杀死当前score最高的进程,一般情况也就是占用内存最大的进程。

解决方法:一是增加系统内存,二是优化进程,使其占用内存降低。三是可以使用oom_score_adj参数,这个参数会被计算入oom_score,可以避免进程被杀死(不推荐使用)。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12316031.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存