精华帖 (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: ( =&gt; 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)] =&gt;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 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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俺也看不出来啥了 |
|
返回顶楼 | |
发表时间:2012-03-05
发帖的时候就在想 RednaxelaFX 会不会回复,多谢分析。
汇编及底层排查方面没有太多深入和经验,明天再尝试下,从java代码方面看看是不是可以发现些什么。 |
|
返回顶楼 | |
发表时间:2012-03-05
这玩儿如此复杂…
你可以试几点。首先大前提是这个问题行为能稳定重现。如果不能稳定重现的话分析起来麻烦得要命。 1、如果按你的默认参数跑能稳定重现,那试试-Xint看还会不会出问题。如果不出问题了那有可能是在HotSpot Client Compiler里有问题 2、如果1还是出问题,那试试在java.net.Inet4AddressImpl.lookupAllHostAddr(String)方法设断点。看看传过来的参数到底是不是null。 3、…如果有minidump那事情会好办一些,但那个… |
|
返回顶楼 | |
发表时间:2012-03-05
好的,多谢指点,我明天尝试下。
|
|
返回顶楼 | |
发表时间:2012-03-06
最后修改:2012-03-06
看是否开了多网卡,如果是禁用其它网卡只保留一个再试试。
|
|
返回顶楼 | |
发表时间:2012-03-06
最后修改:2012-03-06
mfkvfn 写道 看是否开了多网卡,如果是禁用其它网卡只保留一个再试试。
你说的很对,确实是多网卡导致的问题。 因为有一个 VPN 的虚拟网卡,被禁用了,但是程序又试图访问 VPN 网卡连通以后才能访问的地址,结果就出错了。 本来想是不是可以写个小的代码复现这个问题的。 不过最近比较忙,今天发现是多网卡导致的问题以后,就没有多查。 看来多网卡的环境也需要多小心的。 |
|
返回顶楼 | |
发表时间:2012-03-06
mfkvfn 写道 看是否开了多网卡,如果是禁用其它网卡只保留一个再试试。
学习了,这个我也记下来~ 多谢 |
|
返回顶楼 | |
发表时间: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 的。 这个结果,只能说让我很无语。。。 |
|
返回顶楼 | |
发表时间:2012-03-08
Win 7 也试过了,没有问题。 比较诡异啊。
|
|
返回顶楼 | |