出处:JAVA进程突然消失的原因?问题描述在实际生产环境下,如果我们遇见Java进程突然消失,该如何去排查问题? 思路可能有几种原因:①、Java应用程序的问题:发生OOM导致进程Crash最常见的是发生堆内存异常“java.lang.OutOfMemoryError: Java heap space”,排查步骤如下:
②、JVM出错:JVM或JDK自身的Bug导致进程Crash 当JVM发生致命错误导致崩溃时,会生成一个hs_err_pid_xxx.log这样的文件,该文件包含了导致 JVM crash 的重要信息,我们可以通过分析该文件定位到导致 JVM Crash 的原因,从而修复保证系统稳定。 -XX:ErrorFile=/var/log/hs_err_pid<pid>.log 这个文件的内容他主要有如下内容
拿到这个文件后,不用说了,慢慢啃吧。说到这里,我要摸着良心说。这个文件巨复杂,如果要会读这个文件,请下点功夫。 ③被操作系统OOM-Killer Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀掉。
你执行命令 egrep -i 'killed process' /var/log/messages # egrep = grep -E 可以使用基本的正则表达外, 还可以用扩展表达式, -i代表忽略大小写
#或者
grep “Out of memory” /var/log/messages
去日志里进行查询。 dmesg -T| grep java #或者 dmesg -T | grep 'Out of memory' # -T 是显示时间戳 再对比java日志停止时间,看来这里才是问题的根源,所以接下来从优化java内存占用、加内存入手尝试解决问题吧!
备注: dmesg命令是用来在Unix-like系统中显示内核的相关信息的。dmesg全称是display message (or display driver),即显示信息。 实际上,dmesg命令是从内核环形缓冲区中获取数据的。当我们在Linux上排除故障时,dmesg命令会十分方便,它能很好地帮我们鉴别硬件相关的error和warning。除此之外,dmesg命令还能打印出守护进程相关的信息,已帮助我们debug。
|
|
来自: liang1234_ > 《疑难杂症》