论坛首页 Java企业应用论坛

JVM crash --- C [msvcrt.dll+0x37fd4]

浏览 10704 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-03-05   最后修改:2012-03-05

机器不知道怎么回事,启动一些java程序就会报下面的异常。

 

但是有些程序就没有问题,比如 Eclipse 就能正常启动的。 从堆栈来看,似乎是获取ip地址的时候出了问题,可是不明白为什么。

 

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x77c17fd4, pid=5432, tid=3980
#
# JRE version: 6.0_30-b12
# Java VM: Java HotSpot(TM) Client VM (20.5-b03 mixed mode windows-x86 )
# Problematic frame:
# C  [msvcrt.dll+0x37fd4]
#
# 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 (0x0095e400):  JavaThread "main" [_thread_in_native, id=3980, stack(0x00ae0000,0x00b30000)]

siginfo: ExceptionCode=0xc0000005, reading address 0x00000000

Registers:
EAX=0x00000000, EBX=0x000dc7d8, ECX=0x00000001, EDX=0x00000414
ESP=0x00b2ed94, EBP=0x00b2ed94, ESI=0x00000000, EDI=0x00000000
EIP=0x77c17fd4, EFLAGS=0x00010202

Top of Stack: (sp=0x00b2ed94)
0x00b2ed94:   00b2edb4 719c962a 00000000 000dc7d8
0x00b2eda4:   000d0d10 00000000 00000001 00000000
0x00b2edb4:   00b2ee24 719c980a 000dc818 00000000
0x00b2edc4:   00000000 00000001 00000000 00000001
0x00b2edd4:   00000000 00000000 00000001 00000002
0x00b2ede4:   00000000 00000001 00000000 00000000
0x00b2edf4:   00000008 00000000 00b2ee50 00000000
0x00b2ee04:   000d0d10 000dc7d8 00000000 00b2fe00 

Instructions: (pc=0x77c17fd4)
0x77c17fb4:   f1 40 40 66 83 38 00 75 dd 2b 45 08 5f 5e d1 f8
0x77c17fc4:   5b 5d c3 cc cc cc cc cc 8b ff 55 8b ec 8b 45 08
0x77c17fd4:   66 8b 08 40 40 66 85 c9 75 f6 2b 45 08 d1 f8 48
0x77c17fe4:   5d c3 cc cc cc cc cc 8b ff 55 8b ec 8b 4d 08 8b 


Register to memory mapping:

EAX=0x00000000 is an unknown value
EBX=0x000dc7d8 is an unknown value
ECX=0x00000001 is an unknown value
EDX=0x00000414 is an unknown value
ESP=0x00b2ed94 is pointing into the stack for thread: 0x0095e400
EBP=0x00b2ed94 is pointing into the stack for thread: 0x0095e400
ESI=0x00000000 is an unknown value
EDI=0x00000000 is an unknown value


Stack: [0x00ae0000,0x00b30000],  sp=0x00b2ed94,  free space=315k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [msvcrt.dll+0x37fd4]  wcslen+0x8
C  [mswsock.dll+0x962a]  SvchostPushServiceGlobals+0xcd1
C  [mswsock.dll+0x980a]  SvchostPushServiceGlobals+0xeb1
C  [mswsock.dll+0x96d3]  SvchostPushServiceGlobals+0xd7a
C  [mswsock.dll+0x266f]
C  [mswsock.dll+0x1b0a]
C  [WS2_32.dll+0x32b0]  WSALookupServiceNextW+0x12f
C  [WS2_32.dll+0x3290]  WSALookupServiceNextW+0x10f
C  [WS2_32.dll+0x325a]  WSALookupServiceNextW+0xd9
C  [WS2_32.dll+0x31f8]  WSALookupServiceNextW+0x77
C  [WS2_32.dll+0x5af0]  WSALookupServiceNextA+0x63
C  [WS2_32.dll+0x55e8]  gethostname+0x19f
C  [WS2_32.dll+0x53e7]  gethostbyname+0x92
C  [net.dll+0x25e0]  Java_java_net_Inet4AddressImpl_lookupAllHostAddr+0x1e8
j  java.net.Inet4AddressImpl.lookupAllHostAddr(Ljava/lang/String;)[Ljava/net/InetAddress;+0
j  java.net.InetAddress$1.lookupAllHostAddr(Ljava/lang/String;)[Ljava/net/InetAddress;+4
j  java.net.InetAddress.getAddressFromNameService(Ljava/lang/String;Ljava/net/InetAddress;)Ljava/lang/Object;+20
j  java.net.InetAddress.getAllByName0(Ljava/lang/String;Ljava/net/InetAddress;Z)[Ljava/net/InetAddress;+37
j  java.net.InetAddress.getAllByName(Ljava/lang/String;Ljava/net/InetAddress;)[Ljava/net/InetAddress;+325
j  java.net.InetAddress.getAllByName(Ljava/lang/String;)[Ljava/net/InetAddress;+2
j  java.net.InetAddress.getByName(Ljava/lang/String;)Ljava/net/InetAddress;+1
j  java.net.InetSocketAddress.<init>(Ljava/lang/String;I)V+67
j  java.net.Socket.<init>(Ljava/lang/String;I)V+11
j  sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Ljava/lang/String;I)Ljava/net/Socket;+6
j  sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Ljava/lang/String;I)Ljava/net/Socket;+65
j  sun.rmi.transport.tcp.TCPEndpoint.newSocket()Ljava/net/Socket;+62
j  sun.rmi.transport.tcp.TCPChannel.createConnection()Lsun/rmi/transport/Connection;+22
j  sun.rmi.transport.tcp.TCPChannel.newConnection()Lsun/rmi/transport/Connection;+101
j  sun.rmi.server.UnicastRef.newCall(Ljava/rmi/server/RemoteObject;[Ljava/rmi/server/Operation;IJ)Ljava/rmi/server/RemoteCall;+18
j  sun.rmi.transport.DGCImpl_Stub.dirty([Ljava/rmi/server/ObjID;JLjava/rmi/dgc/Lease;)Ljava/rmi/dgc/Lease;+12
j  sun.rmi.transport.DGCClient$EndpointEntry.makeDirtyCall(Ljava/util/Set;J)V+64
j  sun.rmi.transport.DGCClient$EndpointEntry.registerRefs(Ljava/util/List;)Z+238
j  sun.rmi.transport.DGCClient.registerRefs(Lsun/rmi/transport/Endpoint;Ljava/util/List;)V+7
j  sun.rmi.transport.ConnectionInputStream.registerRefs()V+74
j  sun.rmi.transport.StreamRemoteCall.releaseInputStream()V+22
j  sun.rmi.transport.StreamRemoteCall.done()V+1
j  sun.rmi.server.UnicastRef.done(Ljava/rmi/server/RemoteCall;)V+18
j  sun.rmi.registry.RegistryImpl_Stub.lookup(Ljava/lang/String;)Ljava/rmi/Remote;+128
j  java.rmi.Naming.lookup(Ljava/lang/String;)Ljava/rmi/Remote;+24
v  ~StubRoutines::call_stub
V  [jvm.dll+0xfac3b]
V  [jvm.dll+0x18c3a1]
V  [jvm.dll+0xfacbd]
V  [jvm.dll+0x95776]
V  [jvm.dll+0x9d5b3]
C  [javaw.exe+0x2155]
C  [javaw.exe+0x8614]
C  [kernel32.dll+0xb729]  GetModuleFileNameA+0x1ba

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  java.net.Inet4AddressImpl.lookupAllHostAddr(Ljava/lang/String;)[Ljava/net/InetAddress;+0
j  java.net.InetAddress$1.lookupAllHostAddr(Ljava/lang/String;)[Ljava/net/InetAddress;+4
j  java.net.InetAddress.getAddressFromNameService(Ljava/lang/String;Ljava/net/InetAddress;)Ljava/lang/Object;+20
j  java.net.InetAddress.getAllByName0(Ljava/lang/String;Ljava/net/InetAddress;Z)[Ljava/net/InetAddress;+37
j  java.net.InetAddress.getAllByName(Ljava/lang/String;Ljava/net/InetAddress;)[Ljava/net/InetAddress;+325
j  java.net.InetAddress.getAllByName(Ljava/lang/String;)[Ljava/net/InetAddress;+2
j  java.net.InetAddress.getByName(Ljava/lang/String;)Ljava/net/InetAddress;+1
j  java.net.InetSocketAddress.<init>(Ljava/lang/String;I)V+67
j  java.net.Socket.<init>(Ljava/lang/String;I)V+11
j  sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Ljava/lang/String;I)Ljava/net/Socket;+6
j  sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Ljava/lang/String;I)Ljava/net/Socket;+65
j  sun.rmi.transport.tcp.TCPEndpoint.newSocket()Ljava/net/Socket;+62
j  sun.rmi.transport.tcp.TCPChannel.createConnection()Lsun/rmi/transport/Connection;+22
j  sun.rmi.transport.tcp.TCPChannel.newConnection()Lsun/rmi/transport/Connection;+101
j  sun.rmi.server.UnicastRef.newCall(Ljava/rmi/server/RemoteObject;[Ljava/rmi/server/Operation;IJ)Ljava/rmi/server/RemoteCall;+18
j  sun.rmi.transport.DGCImpl_Stub.dirty([Ljava/rmi/server/ObjID;JLjava/rmi/dgc/Lease;)Ljava/rmi/dgc/Lease;+12
j  sun.rmi.transport.DGCClient$EndpointEntry.makeDirtyCall(Ljava/util/Set;J)V+64
j  sun.rmi.transport.DGCClient$EndpointEntry.registerRefs(Ljava/util/List;)Z+238
j  sun.rmi.transport.DGCClient.registerRefs(Lsun/rmi/transport/Endpoint;Ljava/util/List;)V+7
j  sun.rmi.transport.ConnectionInputStream.registerRefs()V+74
j  sun.rmi.transport.StreamRemoteCall.releaseInputStream()V+22
j  sun.rmi.transport.StreamRemoteCall.done()V+1
j  sun.rmi.server.UnicastRef.done(Ljava/rmi/server/RemoteCall;)V+18
j  sun.rmi.registry.RegistryImpl_Stub.lookup(Ljava/lang/String;)Ljava/rmi/Remote;+128
j  java.rmi.Naming.lookup(Ljava/lang/String;)Ljava/rmi/Remote;+24
v  ~StubRoutines::call_stub

---------------  P R O C E S S  ---------------

Java Threads: ( => current thread )
  0x10807800 JavaThread "GC Daemon" daemon [_thread_blocked, id=5684, stack(0x12690000,0x126e0000)]
  0x1089a800 JavaThread "RMI RenewClean-[WIN2008SERVER:51434]" daemon [_thread_blocked, id=4316, stack(0x12640000,0x12690000)]
  0x116f0c00 JavaThread "RMI Scheduler(0)" daemon [_thread_blocked, id=236, stack(0x125f0000,0x12640000)]
  0x00c01c00 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=5956, stack(0x10740000,0x10790000)]
  0x00bf6400 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=2752, stack(0x106f0000,0x10740000)]
  0x00beb800 JavaThread "JDWP Command Reader" daemon [_thread_in_native, id=3380, stack(0x106a0000,0x106f0000)]
  0x00bea400 JavaThread "JDWP Event Helper Thread" daemon [_thread_blocked, id=3576, stack(0x10650000,0x106a0000)]
  0x00be7c00 JavaThread "JDWP Transport Listener: dt_socket" daemon [_thread_blocked, id=1676, stack(0x10600000,0x10650000)]
  0x00bce000 JavaThread "Attach Listener" daemon [_thread_blocked, id=2424, stack(0x10500000,0x10550000)]
  0x00bcd000 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=2580, stack(0x104b0000,0x10500000)]
  0x00bbb000 JavaThread "Finalizer" daemon [_thread_blocked, id=3776, stack(0x10460000,0x104b0000)]
  0x00bb6400 JavaThread "Reference Handler" daemon [_thread_blocked, id=4232, stack(0x10410000,0x10460000)]
=>0x0095e400 JavaThread "main" [_thread_in_native, id=3980, stack(0x00ae0000,0x00b30000)]

Other Threads:
  0x00bb2800 VMThread [stack: 0x103c0000,0x10410000] [id=3836]
  0x00c14400 WatcherThread [stack: 0x10790000,0x107e0000] [id=4756]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap
 def new generation   total 4992K, used 89K [0x02ce0000, 0x03240000, 0x05ee0000)
  eden space 4480K,   2% used [0x02ce0000, 0x02cf66d0, 0x03140000)
  from space 512K,   0% used [0x03140000, 0x03140000, 0x031c0000)
  to   space 512K,   0% used [0x031c0000, 0x031c0000, 0x03240000)
 tenured generation   total 10944K, used 915K [0x05ee0000, 0x06990000, 0x0c2e0000)
   the space 10944K,   8% used [0x05ee0000, 0x05fc4ce0, 0x05fc4e00, 0x06990000)
 compacting perm gen  total 49152K, used 5000K [0x0c2e0000, 0x0f2e0000, 0x102e0000)
   the space 49152K,  10% used [0x0c2e0000, 0x0c7c2070, 0x0c7c2200, 0x0f2e0000)
No shared spaces configured.

Code Cache  [0x00c60000, 0x00d00000, 0x02c60000)
 total_blobs=222 nmethods=93 adapters=73 free_code_cache=32908544 largest_free_block=0

Dynamic libraries:
0x00400000 - 0x00425000 	C:\jdk1.6.0\bin\javaw.exe
0x7c920000 - 0x7c9b6000 	C:\WINDOWS\system32\ntdll.dll
0x7c800000 - 0x7c91e000 	C:\WINDOWS\system32\kernel32.dll
0x77da0000 - 0x77e49000 	C:\WINDOWS\system32\ADVAPI32.dll
0x77e50000 - 0x77ee3000 	C:\WINDOWS\system32\RPCRT4.dll
0x77fc0000 - 0x77fd1000 	C:\WINDOWS\system32\Secur32.dll
0x77d10000 - 0x77da0000 	C:\WINDOWS\system32\USER32.dll
0x77ef0000 - 0x77f39000 	C:\WINDOWS\system32\GDI32.dll
0x76300000 - 0x7631d000 	C:\WINDOWS\system32\IMM32.DLL
0x62c20000 - 0x62c29000 	C:\WINDOWS\system32\LPK.DLL
0x73fa0000 - 0x7400b000 	C:\WINDOWS\system32\USP10.dll
0x7c340000 - 0x7c396000 	C:\jdk1.6.0\jre\bin\msvcr71.dll
0x6d8c0000 - 0x6db6f000 	C:\jdk1.6.0\jre\bin\client\jvm.dll
0x76b10000 - 0x76b3a000 	C:\WINDOWS\system32\WINMM.dll
0x6d870000 - 0x6d87c000 	C:\jdk1.6.0\jre\bin\verify.dll
0x6d3d0000 - 0x6d3ef000 	C:\jdk1.6.0\jre\bin\java.dll
0x6d420000 - 0x6d449000 	C:\jdk1.6.0\jre\bin\jdwp.dll
0x6d740000 - 0x6d746000 	C:\jdk1.6.0\jre\bin\npt.dll
0x6d8b0000 - 0x6d8bf000 	C:\jdk1.6.0\jre\bin\zip.dll
0x6d2b0000 - 0x6d2b7000 	C:\jdk1.6.0\jre\bin\dt_socket.dll
0x71a20000 - 0x71a37000 	C:\WINDOWS\system32\WS2_32.dll
0x77be0000 - 0x77c38000 	C:\WINDOWS\system32\msvcrt.dll
0x71a10000 - 0x71a18000 	C:\WINDOWS\system32\WS2HELP.dll
0x719c0000 - 0x719fe000 	C:\WINDOWS\System32\mswsock.dll
0x76ef0000 - 0x76f17000 	C:\WINDOWS\system32\DNSAPI.dll
0x76d30000 - 0x76d48000 	C:\WINDOWS\system32\iphlpapi.dll
0x76f80000 - 0x76f88000 	C:\WINDOWS\System32\winrnr.dll
0x76f30000 - 0x76f5c000 	C:\WINDOWS\system32\WLDAP32.dll
0x76f90000 - 0x76f96000 	C:\WINDOWS\system32\rasadhlp.dll
0x60fd0000 - 0x61025000 	C:\WINDOWS\system32\hnetcfg.dll
0x71a00000 - 0x71a08000 	C:\WINDOWS\System32\wshtcpip.dll
0x6d6b0000 - 0x6d6c3000 	C:\jdk1.6.0\jre\bin\net.dll
0x68000000 - 0x68036000 	C:\WINDOWS\system32\rsaenh.dll
0x759d0000 - 0x75a7f000 	C:\WINDOWS\system32\USERENV.dll
0x5fdd0000 - 0x5fe25000 	C:\WINDOWS\system32\netapi32.dll
0x6d7a0000 - 0x6d7a6000 	C:\jdk1.6.0\jre\bin\rmi.dll
0x76bc0000 - 0x76bcb000 	C:\WINDOWS\system32\PSAPI.DLL
 
   发表时间:2012-03-05   最后修改:2012-03-05
看起来跟这个bug的描述很像:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4874934
可惜bug report里说“这不是我们的问题”就完事了…

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4680160
这个也是类似问题,不过说是已修复

anyway...这crash在调的函数是这样的:
0000000077c17fcc 8bff             mov edi, edi            
0000000077c17fce 55               push ebp                
0000000077c17fcf 8bec             mov ebp, esp            
0000000077c17fd1 8b4508           mov eax, [ebp+0x8]      
0000000077c17fd4 668b08           mov cx, [eax]           
0000000077c17fd7 40               inc eax                 
0000000077c17fd8 40               inc eax                 
0000000077c17fd9 6685c9           test cx, cx             
0000000077c17fdc 75f6             jnz 0x77c17fd4          
0000000077c17fde 2b4508           sub eax, [ebp+0x8]      
0000000077c17fe1 d1f8             sar eax, 1              
0000000077c17fe3 48               dec eax                 
0000000077c17fe4 5d               pop ebp                 
0000000077c17fe5 c3               ret                     

出问题的时候在试图执行mov cx, [eax],这是从eax执行的地址间接读两个字节出来。此时eax是0于是就出错了。
也就是说上面的调用者传了空指针下来。传给wcslen(str)的参数str是个NULL。

再多的从这个crash log俺也看不出来啥了
0 请登录后投票
   发表时间:2012-03-05  
发帖的时候就在想 RednaxelaFX 会不会回复,多谢分析。

汇编及底层排查方面没有太多深入和经验,明天再尝试下,从java代码方面看看是不是可以发现些什么。
0 请登录后投票
   发表时间:2012-03-05  
这玩儿如此复杂…
你可以试几点。首先大前提是这个问题行为能稳定重现。如果不能稳定重现的话分析起来麻烦得要命。
1、如果按你的默认参数跑能稳定重现,那试试-Xint看还会不会出问题。如果不出问题了那有可能是在HotSpot Client Compiler里有问题
2、如果1还是出问题,那试试在java.net.Inet4AddressImpl.lookupAllHostAddr(String)方法设断点。看看传过来的参数到底是不是null。
3、…如果有minidump那事情会好办一些,但那个…
0 请登录后投票
   发表时间:2012-03-05  
好的,多谢指点,我明天尝试下。
0 请登录后投票
   发表时间:2012-03-06   最后修改:2012-03-06
看是否开了多网卡,如果是禁用其它网卡只保留一个再试试。
9 请登录后投票
   发表时间:2012-03-06   最后修改:2012-03-06
mfkvfn 写道
看是否开了多网卡,如果是禁用其它网卡只保留一个再试试。


你说的很对,确实是多网卡导致的问题。

因为有一个 VPN 的虚拟网卡,被禁用了,但是程序又试图访问 VPN 网卡连通以后才能访问的地址,结果就出错了。

本来想是不是可以写个小的代码复现这个问题的。 不过最近比较忙,今天发现是多网卡导致的问题以后,就没有多查。

看来多网卡的环境也需要多小心的。

0 请登录后投票
   发表时间:2012-03-06  
mfkvfn 写道
看是否开了多网卡,如果是禁用其它网卡只保留一个再试试。

学习了,这个我也记下来~
多谢
0 请登录后投票
   发表时间:2012-03-08   最后修改:2012-03-08
在经过了一系列的尝试以后,终于找到了问题的原因,或者说是找到了让问题重现的步骤。

1). 首先在 hosts 文件中添加如下的条目:
1.1.1.1             TestPC
1.1.1.2             TestPC
1.1.1.1             TestPC


2). 运行如下的代码,这个时候,就会抛我之前的异常了。
            try {
            	String serverHost = "TestPC";
                InetAddress inetAddress = InetAddress.getByName(serverHost);
            } catch (Exception e) {
                e.printStackTrace();
            }


进一步的试验发现, 1.1.1.2 Test PC 这一项,在前面或是后面,都没有问题,只有在中间的情况下,才会导致 jvm crash。
再尝试 ping,发现这个时候,ping 都会报异常的。见下图:


我的机器是 Windows XP,在 Win 7 系统上会不会有这个问题,没有试过。 MAC / Linux 下都试过了,是没有问题的。

问题到这里就很明确了,跟多网卡也没有关系的,是 Windows XP(?)的 bug(?) 导致的。
当然也怪自己,因为 hosts 里面的配置比较乱,一直没有留意有重复配置,才导致的这个问题,正常也只会配置一个 Host 一个 IP 的。

这个结果,只能说让我很无语。。。
  • 大小: 10.2 KB
0 请登录后投票
   发表时间:2012-03-08  
Win 7 也试过了,没有问题。  比较诡异啊。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics