Linux 学习 之 killer 问题
命令功能说明
dmesg | grep -i kill
用于从系统内核日志中筛选包含 kill
关键字的信息(不区分大小写)。该组合常用于排查进程被强制终止(如 OOM Killer 触发)、硬件错误或系统资源限制导致的异常问题。
[19234682.004705] Out of memory: Kill process 1199793 (java) score 287 or sacrifice child
[19234682.004705] Killed process 1200033 (sh) total-vm:215488kB, anon-rss:1152kB, file-rss:0kB, shmem-rss:0kB
[19234682.004705] FlushManager invoked oom-killer: gfp_mask=0x6200ca(GFP_HIGHUSER_MOVABLE), nodemask=(null), order=0, oom_score_adj=0
[19234682.004705] oom_kill_process+0x334/0x370
[19234682.004705] Out of memory: Kill process 1199793 (java) score 287 or sacrifice child
[19234682.004705] Killed process 1199793 (java) total-vm:4934848kB, anon-rss:873408kB, file-rss:0kB, shmem-rss:64kB# 图中实际内存与虚拟内存的占比严重不合理(正常范围 40%~70%),故而需要查看内存设置。
# 虚拟内存是在物理内存的基础上分配的,当分配了太多的虚拟内存时,会导致物理内存不足,这时就会发生Out of memory## 查看内存统计,有多少空闲
free -h
命令分解
-
dmesg
- 显示内核环形缓冲区中的日志,包含硬件检测、驱动加载、系统错误等信息。
- 默认输出需 root 权限,普通用户可能需通过
sudo dmesg
访问完整日志。
-
grep -i kill
-i
参数忽略大小写,匹配kill
、KILL
等变体。- 常见匹配场景:
oom-killer
(内存不足终止进程)、killed process
(手动或系统终止进程)。
常见输出及解读
示例1:OOM Killer 终止进程
[12345.678] Out of memory: Killed process 1234 (nginx) score 512
- 原因:系统内存耗尽,内核根据进程内存占用(
score
)选择终止目标(如nginx
)。 - 解决:优化内存使用,增加系统内存,或调整
vm.overcommit_memory
参数。
示例2:权限或信号终止
[54321.0] Process 5678 (python) killed by signal 9 (SIGKILL)
- 原因:进程被强制终止(
SIGKILL
),可能由用户手动kill -9
或系统策略(如cgroup
限制)触发。 - 解决:检查进程日志或系统监控工具(如
top
)确认终止原因。
示例3:硬件或驱动问题
[11111.222] Kernel panic - not syncing: Attempted to kill init!
- 原因:关键系统进程(如
init
)被终止,通常伴随内核崩溃。 - 解决:检查硬件稳定性(如内存坏块)、驱动兼容性或系统更新。
扩展用法
- 按时间筛选:结合
dmesg -T
显示可读时间戳,再通过grep
过滤特定时间段。dmesg -T | grep -i "kill" | grep "Jun 15"
- 统计终止事件:使用
wc
统计匹配行数。dmesg | grep -i kill | wc -l
- 结合
journalctl
:若系统使用systemd
,可通过以下命令查询更结构化日志。journalctl -k --grep="kill"
注意事项
- 若输出为空,可能无相关事件,或日志被轮转覆盖(检查
/var/log/kern.log
归档)。 - 高频繁进程终止需结合
dmesg --follow
实时监控,或使用sar
、vmstat
分析资源趋势。