JVM崩溃

程序本来好好的, 做了一次大修改,测试的时候发现在某些场合下,程序突然消失了,检查后发现JVM崩溃了.

在运行目录下,生成了一个错误log文件: hs_err_pid26290.log

打开看, 能看到一些信息; 同时查了一下网上的一些资料.

JVM的崩溃, 在网上找了一下一般以以下几种情况居多:

1. 内存不够, 尤其是Heap不够造成的, 具体的例子如:  http://www.zhuoda.org/hofman/66549.html

2.JVM编译的时候发生的JVM崩溃, 如: 

 http://seanhe.iteye.com/blog/905997 , 

 http://hi.baidu.com/wzgws/item/60ad0dea9ae6aff6e0a5d476

3. GC的时候发生的JVM崩溃, 这个网上最多了.

按照资料的情况,对log文件做了分析,

log文件的内容包括这几部分:(直接抄网上的, 没用自己的log来分析)

主要日志信息如下:
JVM crash main information:
1.JVM:(1.5.0_17-b04 mixed mode) 
A fatal error has been detected by the Java Runtime Environment:  
2.SIGSEGV (0xb)  
3.libjvm.so+0x48acf3  
4.Java Threads: ( => current thread )
  ComiplerThread [_thread_in_native] 
5.Current CompileTask:
    com.apusic.net.Muxer.acceptConnection(SocketAdaptor paramSocketAdaptor) 
6.Heap的使用情况正常。

 

通过Thread, 可以判断问题出在哪个类型的线程中, 通过Heap可以分析内存使用的情况;

分析了自己的log,问题也是出在 CompilerThread0 , 根据Java TroubleShooting Guide的解释(相关部分在http://seanhe.iteye.com/blog/905997中已经给出翻译), 将 相关的方法配制在-XX:CompileCommand中, 问题得以解决;

还有: 崩溃位置的定义在这个log文件中有说明:

Native frames: (

J=compiled Java code,

j=interpreted,

Vv=VM code,

C=native code

)

猜你喜欢

转载自zybing.iteye.com/blog/1575265
JVM