dmesg -T 本身不支持实时监控,需用 dmesg -T -w | grep -i "killed process" 实时跟踪 OOM-Killer 日志;-w 启用持续追加,-T 转换时间戳,grep 过滤关键词;还可扩展匹配“out of memory”等预警信息,并用 awk 提取进程名和 PID。

dmesg -T 本身不支持“实时监控”,它只是以人类可读时间格式(带本地时区)打印当前内核环形缓冲区(ring buffer)的快照。要持续捕获 OOM-Killer 的杀进程记录,需结合 实时流式输出 和 关键词过滤。以下是实用方法:
用 dmesg -T 实时跟踪 OOM-Killer 日志
执行以下命令即可持续监听新产生的 OOM-Killer 杀进程事件:
dmesg -T -w | grep -i "killed process"
说明:
-
-w(--follow):启用实时跟踪模式,类似
tail -f,自动追加新内核日志 -
-T:将时间戳转为本地可读格式(如
[Mon Jun 10 14:23:45 2024]),便于排查时间线 -
grep -i "killed process":OOM-Killer 在日志中固定输出形如
Killed process 12345 (java) total-vm:2845678kB, anon-rss:1987654kB, file-rss:0kB, shmem-rss:0kB,关键词killed process稳定且唯一
增强实用性:同时匹配更多 OOM 相关线索
仅靠 killed process 可能漏掉触发前的预警(如内存不足、cgroup 超限等),建议扩展过滤:
dmesg -T -w | grep -i -E "(killed process|out of memory|oom_kill|memory cgroup out of memory)"
常见匹配内容包括:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
Out of memory: Killed process 12345 (nginx)—— 主触发行 -
Memory cgroup out of memory: Kill process 6789 (python3)—— 容器/cgroup 场景 -
page allocation failure: order:4或slab_out_of_memory—— 内存分配失败前置信号(可选开启)
避免刷屏干扰:只显示关键字段
默认输出包含大量内存细节(如 vm/rss 数值),若只需快速确认哪个进程被杀,可用 awk 提取进程名和 PID:
dmesg -T -w | grep -i "killed process" | awk '{print $NF, $(NF-1)}' | sed 's/[()]//g'
示例输出:
java 12345
说明:$NF 是最后一字段(如 (java)),$(NF-1) 是倒数第二字段(如 12345),sed 去掉括号更清晰。
补充建议:配合 journalctl 更可靠(systemd 系统)
某些发行版(如 RHEL 8+/Ubuntu 20.04+)中,dmesg 日志可能被 systemd-journald 截断或轮转。如需长期归档或跨重启追溯,推荐:
journalctl -k -o short-iso --since "1 hour ago" | grep -i "killed process"
其中 -k 表示只查内核日志,--since 支持时间范围,-o short-iso 输出带 ISO 时间戳,比纯 dmesg 更稳定。

















