【发布时间】:2023-04-02 18:59:01
【问题描述】:
当 Linux 内存不足 (OOM) 时,OOM 杀手会根据一些启发式方法选择要杀死的进程(读起来很有趣:http://lwn.net/Articles/317814/)。
如何以编程方式确定最近被 OOM 杀手杀死的进程?
【问题讨论】:
标签: linux linux-kernel
当 Linux 内存不足 (OOM) 时,OOM 杀手会根据一些启发式方法选择要杀死的进程(读起来很有趣:http://lwn.net/Articles/317814/)。
如何以编程方式确定最近被 OOM 杀手杀死的进程?
【问题讨论】:
标签: linux linux-kernel
试试这个:
grep -i 'killed process' /var/log/messages
【讨论】:
/var/log/syslog,而在其他发行版上位于/var/log/messages。我认为前者是 Debian,后者是 Red Hat,BICBW。
egrep 在这里没有意义。普通的旧grep,或者如果我们要具体一点,fgrep,更有意义。 (相应地编辑答案。)
试试这个,这样您就不必担心您的日志在哪里:
dmesg -T | egrep -i 'killed process'
-T, --ctime - 打印人类可读的时间戳。
【讨论】:
/var/log/messages 中看到了在dmesg//var/log/dmesg 中没有出现的结果。这可能是某种错误配置,但值得注意的是,使用这两种方法可能是个好主意。
现在 dstat 提供了在你的运行系统中找出哪个进程可能被 oom 机制杀死的功能
dstat --top-oom
--out-of-memory---
kill score
java 77
java 77
java 77
根据手册页
--top-oom
show process that will be killed by OOM the first
【讨论】:
试试这个:
grep "Killed process" /var/log/syslog
【讨论】: