表现:
1.前端突然问我,Java服务是不是停了。
2.第一反应查看java日志文件,没有发现服务重启的日志,OOM的日志,异常日志也没有信息
3.根据日志里面显示的pid以及启动保存的pid,去查看linux进程,发现该进程已经不在
分析:
1.先确认java进程是否停止,指令:lsof -i:8080 或者netstat -utnlp | grep 'java' 查看java进程/端口是否还在,是进程在,但是无法响应还是进程直接被杀,发现进程已经没了
2.查看java的日志文件.tail -f xxx.log,是否有什么遗言,错误日志,异常日志,发现没有
3.cd /var/log/查看是否有/var/log/hs_err_pid的文件,没有,排除JVM故障
4.查看/var/log/message的日志,直接grep 查找我的pid 的java日志,发现Out of memory: Kill process.
5.使用dmesg | grep 'java'也找到了相关日志。确诊是因为linux机器内存不足导致的问题
message的日志如下
dmesg日志如下:
最后,确诊了问题,使用free查看内存使用情况,发现着实紧张。再使用pstree -a查看进程树,吓了一大跳,这就是一台毒瘤机。
因此判定这台机肯定经常发生OOM killer。
使用grep 'Kill process' /var/log/messages | wc -l 查看oom的情况,从此打开了新世界的大门.......