浅析JVM 崩溃的原因及解决方法
王树大2010-2-8
一问题的提出
二JVM 崩溃原因
常见的能够引起JVM崩溃的原因主要有:
?线程阻塞
?CPU 使用率过高
?JVM Crash
?堆内存不足
?类装载
?Java虚拟机自身的Bug
?JDK与服务器(CPU、内存、操作系统)的兼容性
?内存溢出
三日志分析
1.日志文件的生成
当Java虚拟机非正常退出时,都会产生hs_err_pid.log的错误日志,缺省情况下,这个文件会产生在bin(对Tomcat来说一般在CATALINA_HOME/bin)目录下,可以在Java启动参数通过下面的设置,来改变这个文件的位置和命名规则。例如:
java -XX:ErrorFile=%CATALINA_HOME%/logs/java_error_%p.log
2.日志内容分析
1)
# SIGSEGV (0xb) at pc=0x004e57dc, pid=7189, tid=1831316368
| | | | +--- thread id
| | | +------------- process id
| | +--------------------------- program counter
| | (instruction pointer)
| +--------------------------------------- signal number
+---------------------------------------------- signal name 其中Signal Name:
SIGSEGV:意味着JVM正在执行本地或JNI的代码;
EXCEPTION_ACCESS_VIOLATION:意味着Java应用Crash的时候,正在运行JVM自己的代码,而不是外部的Java代码或其他类库代码;
EXCEPTION_STACK_OVERFLOW:表示这是个栈溢出的错误;
SIGILL:
2)Problematic frame