请您先登录,才能继续操作

[讨论] 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么?
Global site tag (gtag.js) - Google Analytics