线上项目被 Killed
起因
下午数据部同事突然通知到项目登不上,马上查看,发现后台项目停止了,可为什么会被停止呢?
问题排查
项目因为有导入功能,使用的是 poi,众所周知,poi 读取和写入操作占用内存都很夸张,所以就给项目 VM 分配了 -Xmx=8192m,8G 内存,-Xms=4096m,4G 内存。从而导致在进行导入操作的时候项目大量吞噬内存,进而导致 CentOS 启动了系统保护,执行了 Killed 将项目进程给杀掉了。
通过 ps -aux
或者 top
查看系统资源占用情况
内存
ps -aux | sort -k4nr | head
通过上述命令即可查看内存占用情况
或者
使用 top
命令,然后按 M
根据内存排序,也可查看占用最多的进程。
注意:此处
M
为大写。
CPU
ps -aux | sort -k3nr | head
通过上述命令即可查看 CPU 占用情况
或者
使用 top
命令,然后按 P
根据 CPU 排序,也可查看占用最多的进程。
注意:此处
P
为大写。
查看 killed 历史
dmesg | egrep -i -B100 'killed process'
执行该命令即可查看系统 kill 掉的进程:
可以看到 Java 进程被 Killed 的详情。
Linux Kill 日志和分析
对于如何精准查看被 kill 的日志,可以看这篇文章:
原因分析和解决方案: