当系统资源不足时,Linux 内核也可以决定终止一个或多个进程。 一个非常常见的例子是内存不足 (OOM) killer,会在系统的物理内存耗尽时触发。
- 当内存不足时,内核会将相关信息记录到内核日志缓冲区中,该缓冲区可通过 /dev/kmsg 获得。
- 有几个工具/脚本/命令 可以更轻松地从该虚拟设备读取数据,其中最常见的是 dmesg 和 journalctl。
查看Killed日志
任意目录下,不需要进入log目录
使用sudo dmesg | tail -7
命令
- oom-kill之后,就是解释那个被killed的程序的pid和uid
- Out of memory: Killed process 1138439 (python3) total-vm:8117956kB, anon-rss:5649844kB,内存不够
- total_vm:总共使用的虚拟内存 Virtual memory use (in 4 kB pages)
8117956/1024(得到MB)/1024(得到GB)=7.741GB - rss:常驻内存使用Resident memory use (in 4 kB pages)
5649844/1024/1024=5.388GB
其他查看方式
journalctl --list-boots | awk '{ print $1 }' | xargs -I{} journalctl --utc --no-pager -b {} -kqg 'killed process' -o verbose --output-fields=MESSAGE
- 直接寻找错误
journalctl -xb | egrep -i 'killed process' sudo dmesg | egrep -i -B100 'killed process' # 其中-B100,表示 'killed process’之前的100行内容 # 重点关注其中最后两列:oom_score_adj和name egrep -i 'killed process' /var/log/messages 或 egrep -i -r 'killed process' /var/log
释放无用内存占用
# 查看系统内存情况 cat /proc/meminfo # 查看当前空闲内存 free -m free -g
- 释放无用内存
# 查看某个用户的内存使用情况 # top -u username top -u hss # 使用q退出top界面 # 查看详细的command内容 top -u hss -c # 查看特定PID或进程的资源消耗情况 top -p `pgrep -d "," node` # 正解