linux c 运行报错 killed

素颜马尾好姑娘i 2021-07-28 12:53 627阅读 0赞

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

  1. Aug 11 16:28:11 kernel: Out of memory: Kill process 3080 (forward) score 559 or sacrifice child
  2. 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:

  1. cat /proc/988/oom_score

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

解决方法:

一是增加系统内存,

二是优化进程,使其占用内存降低。

三是可以使用 oom_score_adj 参数,这个参数会被计算入oom_score,可以避免进程被杀死(不推荐使用)。

发表评论

表情:
评论列表 (有 0 条评论,627人围观)

还没有评论,来说两句吧...

相关阅读