[讨论] Java服务运行3天挂了,高手看看啥原因啊
xiaoyuwei
2012-04-19
#
# A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6e051556, pid=3580, tid=2696 # # JRE version: 6.0_24-b07 # Java VM: Java HotSpot(TM) Client VM (19.1-b02 mixed mode windows-x86 ) # Problematic frame: # C [profilerinterface.dll+0x1556] # # If you would like to submit a bug report, please visit: # http://java.sun.com/webapps/bugreport/crash.jsp # The crash happened outside the Java Virtual Machine in native code. # See problematic frame for where to report the bug. # --------------- T H R E A D --------------- Current thread (0x623f6800): JavaThread "*** Profiler Agent Special Execution Thread 2" daemon [_thread_in_native, id=2696, stack(0x68fa0000,0x68ff0000)] siginfo: ExceptionCode=0xc0000005, writing address 0x00000000 Registers: EAX=0x00004bdb, EBX=0x623f6918, ECX=0x000012f6, EDX=0x6e060048 ESP=0x68fef7f4, EBP=0x6f5ced44, ESI=0x6e060048, EDI=0x00000000 EIP=0x6e051556, EFLAGS=0x00010207 Register to memory mapping: EAX=0x00004bdb 0x00004bdb is pointing to unknown location EBX=0x623f6918 0x623f6918 is pointing to unknown location ECX=0x000012f6 0x000012f6 is pointing to unknown location EDX=0x6e060048 0x6e060048 is pointing to unknown location ESP=0x68fef7f4 0x68fef7f4 is pointing into the stack for thread: 0x623f6800 "*** Profiler Agent Special Execution Thread 2" daemon prio=10 tid=0x623f6800 nid=0xa88 runnable [0x68fef000] java.lang.Thread.State: RUNNABLE EBP=0x6f5ced44 0x6f5ced44 is pointing to unknown location ESI=0x6e060048 0x6e060048 is pointing to unknown location EDI=0x00000000 0x00000000 is pointing to unknown location Top of Stack: (sp=0x68fef7f4) 0x68fef7f4: 00004bdb 623f6800 5315d340 68fef854 0x68fef804: 5315d340 00000000 0000104e 7d0c3998 0x68fef814: 6e060048 00003208 01bfe7f2 7d0b75e8 0x68fef824: 68fef85c 68fef868 68fef864 fffffffe 0x68fef834: 68fef834 5315d340 68fef868 5315d668 0x68fef844: 00000000 5315d340 00000000 68fef864 0x68fef854: 68fef88c 01bf2fc5 5315d5f0 01bfb809 0x68fef864: 0ffec778 0b9e0a00 68fef86c 5315d26f Instructions: (pc=0x6e051556) 0x6e051546: ce 8b 74 24 20 8b f8 8b c1 8b 54 24 20 c1 e9 02 0x6e051556: f3 a5 8b c8 83 c4 04 83 e1 03 f3 a4 8b 0b 6a 02 Stack: [0x68fa0000,0x68ff0000], sp=0x68fef7f4, free space=317k Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) C [profilerinterface.dll+0x1556] Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) j org.netbeans.lib.profiler.server.system.Classes.doRedefineClasses([Ljava/lang/Class;[[B)I+0 j org.netbeans.lib.profiler.server.system.Classes.redefineClasses([Ljava/lang/Class;[[B)V+127 j org.netbeans.lib.profiler.server.ProfilerInterface.instrumentMethodGroupNow(Lorg/netbeans/lib/profiler/wireprotocol/InstrumentMethodGroupData;)V+235 j org.netbeans.lib.profiler.server.ProfilerInterface.getAndInstrumentClasses(Z)Z+130 j org.netbeans.lib.profiler.server.ProfilerInterface.access$900(Z)Z+1 j org.netbeans.lib.profiler.server.ProfilerInterface$InitiateInstThread.run()V+318 v ~StubRoutines::call_stub --------------- P R O C E S S --------------- Java Threads: ( => current thread ) 0x61b0e400 JavaThread "RMI TCP Connection(217)-10.78.195.63" daemon [_thread_in_native, id=15648, stack(0x68c80000,0x68cd0000)] =>0x623f6800 JavaThread "*** Profiler Agent Special Execution Thread 2" daemon [_thread_in_native, id=2696, stack(0x68fa0000,0x68ff0000)] 高手解释下啊, 谢谢 |
|
xiaoyuwei
2012-04-19
好像跟Profiler Agent 线程有关,这个线程应该是Java本身的线程,这个线程运行长时间会把JVM搞挂吗>
|
|
RednaxelaFX
2012-04-19
不,看起来你在用NetBean Profiler。出问题的线程也是这个agent的(而不是JVM自身的)。
用下面这组关键字能Google到很多crash案例,楼主要不要试试自己先看看: netbeans profiler agent special execution thread |
|
xiaoyuwei
2012-04-19
上面错误日志里 显示貌似是profilerinterface.dll 文件问题。
我在后面的错误日志信息里发现这个文件的目录 0x6d1a0000 - 0x6d1c3000 C:\NetEuo\run\jre\bin\dcpr.dll 0x6d2c0000 - 0x6d2da000 C:\NetEuo\run\jre\bin\instrument.dll 0x6e050000 - 0x6e058000 C:\Program Files\Java\jdk1.6.0_25\lib\visualvm\profiler\lib\deployed\jdk16\windows\profilerinterface.dll 实际上 服务器运行的jre是在 C:\NetEuo\run\jre里面的。版本是:6.0_24-b07 而我为了监控性能 ,又在另一个jdk目录C:\Program Files\Java\jdk1.6.0_25下的启动了jvisualvm 。。因为jvisualvm工具只在jdk里才有,jre里没有 但他们2个版本不一致 ,一个是24-b07,一个是25, 会不会因为这个原因导致的呢,Java有没有规定 高版本jdk里面的jvisualvm 不能用来监视低版本JVM虚拟机,一旦这么做了,就会把原来的JVM搞挂掉。 R大? |
|
RednaxelaFX
2012-04-19
xiaoyuwei 写道 一个是24-b07,一个是25,
会不会因为这个原因导致的呢,Java有没有规定 高版本jdk里面的jvisualvm 不能用来监视低版本JVM虚拟机,一旦这么做了,就会把原来的JVM搞挂掉。 R大? 不会,同一个大版本下(这里就是同是JDK6下)的应该都是兼容的,不兼容就是bug。 |
|
xiaoyuwei
2012-04-19
但从日志看确实是jvisualvm启动中携带的profilerinterface.dll把JVM搞挂的啊。
还有一个疑惑是: 监视工具按道理只是一个外部工具啊,怎么存在把主进程搞挂的风险呢。这是不是存在设计的问题啊 |
|
xiaoyuwei
2012-04-19
难道这个profilerinterface.dll 不是因为jvisualvm启动而存在,而是jre自己启动的时候启动起来的? jre不是可以单独运行,不需要jdk么?
|