New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Linux 找出最有可能被 OOM Killer 杀掉的进程 #31

Open
Yhzhtk opened this Issue Jul 29, 2015 · 0 comments

Comments

Projects
None yet
1 participant
@Yhzhtk
Owner

Yhzhtk commented Jul 29, 2015

OOM killer 是什么意思,可以在网上查一下,很多资料,这里不再解释。

其中有三个相关文件:

  • /proc/$PID/oom_adj
  • /proc/$PID/oom_score
  • /proc/$PID/oom_score_adj

其中 oom_score 表示最终的分数,该分数越大,越可能被 Killer 杀掉。

而 oom_adj 是调整分数的,可以设置为负值,会对 oom_score减分。

从Linux 2.6.36开始都安装了/proc/$PID/oom_score_adj,此后将替换为/proc/$PID/oom_adj。详细内容请参考Documentation/feature-removal-schedules.txt。即使当前是对/proc/$PID/oom_adj进行的设置,在内核内部进行变换后的值也是针对/proc/$PID/oom_score_adj设置的。

通过 cat /proc/$PID/oom_score 可以查看进程的得分,下面的脚步是可以查询系统所有进程的 oom_score。

ps -eo pid,comm,pmem --sort -rss | awk '{"cat /proc/"$1"/oom_score" | getline oom; print $0"\t"oom}'

上面的命令会得到如下结果:

  PID COMMAND         %MEM
28810 java            36.1      178
 4648 java            22.7      124
14489 java            18.3      119
30511 java            11.7      91
14135 salt-minion      0.2      1
29424 rsyslogd         0.1      1
23480 pickup           0.0      1
 1343 qagent           0.0      1
 5586 sshd             0.0      1
22999 collectd         0.0      1

其中第一列是PID,第二列是进程,第三列表示内存使用百分比,最后一列即为 oom_score。

最容易被杀掉的是 28810 这个 java 程序,因为分数最高。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment