背景:
JAVA服务线上毫无征兆的直接crash掉,打开日志查看,日志文件毫无相关挂掉的信息,所以当时直接选择了重启,当时的猜测是:服务内存不足导致程序进程直接挂掉?
查找原因
后来学习查找到一个命令dmesg命令,这个命令还是非常强大的。dmesg命令行实用程序用于在Linux和其他类似Unix的操作系统中打印和控制内核环形缓冲区。对于检查内核启动消息和调试与硬件相关的问题很有用。
可以在服务器执行命令:
# 按时间格式显示
dmesg -T
# 显示跟java 有关的日志
dmesg -T | grep "(java)"
通过命令dmesg -T | grep "(java)"
得到结果为:
$>dmesg -T | grep "(java)"
[Sat Jul 4 09:11:49 2020] Out of memory: Kill process 20982 (java) score 847 or sacrifice child
[Sat Jul 4 09:11:49 2020] Killed process 20982 (java) total-vm:6072468kB, anon-rss:3280252kB, file-rss:0kB, shmem-rss:0kB
[Thu Jul 9 12:42:41 2020] Out of memory: Kill process 22667 (java) score 846 or sacrifice child
[Thu Jul 9 12:42:41 2020] Killed process 22667 (java) total-vm:60