线上项目被 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 掉的进程:

image.png

可以看到 Java 进程被 Killed 的详情。

Linux Kill 日志和分析

对于如何精准查看被 kill 的日志,可以看这篇文章:

linux 程序被Killed,如何精准查看日志

原因分析和解决方案:

linux 环境下进程被 killed掉原因分析和解决方法