2012-04-04 7 views
1

In meiner Java-Anwendung mehrere Threads in regelmäßigen Abständen bekommen System "Prozessliste" durch eine DLL (namens ProcessDLL.dll). Wenn es nur einen Thread in meiner Anwendung gibt, funktioniert es gut. Aber mit mehr als einem Thread bekomme ich eine EXCEPTION_ACCESS_VIOLATION. Ist das ein Problem mit der DLL-Implementierung oder in Java-Anwendung, wo mehrere Threads versuchen, auf DLL zuzugreifen? Irgendwelche Ideen ...JVM crackt mit EXCEPTION_ACCESS_VIOLATION

Es folgt mein Fehlerprotokoll:

# 
# A fatal error has been detected by the Java Runtime Environment: 
# 
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x7c9108d3, pid=2880, tid=1584 
# 
# JRE version: 6.0_16-b01 
# Java VM: Java HotSpot(TM) Client VM (14.2-b01 mixed mode windows-x86) 
# Problematic frame: 
# C [ntdll.dll+0x108d3] 
# 
# 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 (0x0a9c9800): JavaThread "taskmgr" [_thread_in_native, id=1584, stack(0x0be70000,0x0bec0000)] 

siginfo: ExceptionCode=0xc0000005, reading address 0x656c6441 

Registers: 
EAX=0x656c6441, EBX=0x0b2f0178, ECX=0x656c6449, EDX=0x000001aa 
ESP=0x0bebf778, EBP=0x0bebf834, ESI=0x0b3a31b0, EDI=0x0b2f0000 
EIP=0x7c9108d3, EFLAGS=0x00010293 

Top of Stack: (sp=0x0bebf778) 
0x0bebf778: 0b2f21d0 0b3a3860 00000000 00000000 
0x0bebf788: 0bebf76c 0b3a31b0 0b2f0178 7403c6dc 
0x0bebf798: 0b3b3c50 ffffffff 74005087 74005bec 
0x0bebf7a8: 0b3b0ff8 0b6e30b8 656c6441 00000000 
0x0bebf7b8: 00000000 0bebf7f0 00000000 0b6e2fa8 
0x0bebf7c8: 0b2a1ef8 6a957160 656c6449 000006a8 
0x0bebf7d8: 0b6e7740 00000001 0b712c98 00000035 
0x0bebf7e8: 0bebf80c 7400605b 0b3b0ff8 74004866 

Instructions: (pc=0x7c9108d3) 
0x7c9108c3: d9 74 16 8d 41 f8 89 85 7c ff ff ff 66 8b 55 e4 
0x7c9108d3: 66 3b 10 0f 87 93 fe ff ff 8d 46 08 89 85 64 ff 


Stack: [0x0be70000,0x0bec0000], sp=0x0bebf778, free space=317k 
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) 
C [ntdll.dll+0x108d3] 
C [ProcessDLL.dll+0x127a2] 

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) 
j process.info.NTProcessWin32.jniGetProcessInfosN([Ljava/lang/String;J)[Lprocess/info/NTProcess;+0 
j process.info.NTProcessWin32.getProcessInfos([Ljava/lang/String;J)[Lprocess/info/NTProcess;+9 
j process.info.InstanceController.getAndSetProcesses()V+17 
j process.info.ControllerImpl$UpdateGraphTimer.run()V+7 
j java.util.TimerThread.mainLoop()V+221 
j java.util.TimerThread.run()V+1 
v ~StubRoutines::call_stub 

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

Java Threads: (=> current thread) 
    0x003a7000 JavaThread "DestroyJavaVM" [_thread_blocked, id=1288, stack(0x00840000,0x00890000)] 
=>0x0a9c9800 JavaThread "taskmgr" [_thread_in_native, id=1584, stack(0x0be70000,0x0bec0000)] 
    0x0afb8400 JavaThread "notepad" [_thread_blocked, id=3408, stack(0x0be20000,0x0be70000)] 
    0x0aee8800 JavaThread "mspaint" [_thread_blocked, id=3188, stack(0x0bdd0000,0x0be20000)] 
    0x0aee7400 JavaThread "mmc" [_thread_blocked, id=3196, stack(0x0bd80000,0x0bdd0000)] 
    0x0aa5dc00 JavaThread "firefox" [_thread_blocked, id=1224, stack(0x0bd30000,0x0bd80000)] 
    0x0b0b7c00 JavaThread "eclipse" [_thread_in_native, id=2628, stack(0x0bc80000,0x0bcd0000)] 
    0x0b7e4400 JavaThread "cmd" [_thread_blocked, id=3804, stack(0x0bc30000,0x0bc80000)] 
    0x0b7e0800 JavaThread "7zFM" [_thread_blocked, id=296, stack(0x0bbe0000,0x0bc30000)] 
    0x0b0b5000 JavaThread "Keep-Alive-Timer" daemon [_thread_blocked, id=3724, stack(0x0b790000,0x0b7e0000)] 
    0x0af9cc00 JavaThread "Thread-1" daemon [_thread_blocked, id=244, stack(0x0b0c0000,0x0b110000)] 
    0x0aa5a800 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=1480, stack(0x0ae20000,0x0ae70000)] 
    0x0aa57400 JavaThread "CompilerThread0" daemon [_thread_blocked, id=3656, stack(0x0add0000,0x0ae20000)] 
    0x0aa52800 JavaThread "JDWP Command Reader" daemon [_thread_in_native, id=3756, stack(0x0ad80000,0x0add0000)] 
    0x0aa47400 JavaThread "JDWP Event Helper Thread" daemon [_thread_blocked, id=3672, stack(0x0ad30000,0x0ad80000)] 
    0x0aa44c00 JavaThread "JDWP Transport Listener: dt_socket" daemon [_thread_blocked, id=3500, stack(0x0ace0000,0x0ad30000)] 
    0x0aa39c00 JavaThread "Attach Listener" daemon [_thread_blocked, id=3660, stack(0x0abf0000,0x0ac40000)] 
    0x0aa38800 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=2604, stack(0x0aba0000,0x0abf0000)] 
    0x0aa29400 JavaThread "Finalizer" daemon [_thread_blocked, id=1628, stack(0x0ab50000,0x0aba0000)] 
    0x0aa24c00 JavaThread "Reference Handler" daemon [_thread_blocked, id=3940, stack(0x0ab00000,0x0ab50000)] 

Other Threads: 
    0x0aa20800 VMThread [stack: 0x0aab0000,0x0ab00000] [id=3048] 
    0x0aa6e000 WatcherThread [stack: 0x0ae70000,0x0aec0000] [id=3232] 

VM state:not at safepoint (normal execution) 

VM Mutex/Monitor currently owned by a thread: None 

Heap 
def new generation total 960K, used 733K [0x02910000, 0x02a10000, 0x02df0000) 
    eden space 896K, 74% used [0x02910000, 0x029b76a8, 0x029f0000) 
    from space 64K, 99% used [0x02a00000, 0x02a0fff8, 0x02a10000) 
    to space 64K, 0% used [0x029f0000, 0x029f0000, 0x02a00000) 
tenured generation total 4096K, used 3164K [0x02df0000, 0x031f0000, 0x06910000) 
    the space 4096K, 77% used [0x02df0000, 0x031073c0, 0x03107400, 0x031f0000) 
compacting perm gen total 12288K, used 8431K [0x06910000, 0x07510000, 0x0a910000) 
    the space 12288K, 68% used [0x06910000, 0x0714bc90, 0x0714be00, 0x07510000) 
No shared spaces configured. 

Dynamic libraries: 
0x00400000 - 0x00424000  C:\Program Files\Java\jdk1.6.0_16\bin\javaw.exe 
0x7c900000 - 0x7c9b2000  C:\WINDOWS\system32\ntdll.dll 
0x7c800000 - 0x7c8f6000  C:\WINDOWS\system32\kernel32.dll 
0x77dd0000 - 0x77e6b000  C:\WINDOWS\system32\ADVAPI32.dll 
0x77e70000 - 0x77f03000  C:\WINDOWS\system32\RPCRT4.dll 
0x77fe0000 - 0x77ff1000  C:\WINDOWS\system32\Secur32.dll 
0x7e410000 - 0x7e4a1000  C:\WINDOWS\system32\USER32.dll 
0x77f10000 - 0x77f59000  C:\WINDOWS\system32\GDI32.dll 
0x76390000 - 0x763ad000  C:\WINDOWS\system32\IMM32.DLL 
0x7c340000 - 0x7c396000  C:\Program Files\Java\jdk1.6.0_16\jre\bin\msvcr71.dll 
0x6d8b0000 - 0x6db3b000  C:\Program Files\Java\jdk1.6.0_16\jre\bin\client\jvm.dll 
0x76b40000 - 0x76b6d000  C:\WINDOWS\system32\WINMM.dll 
0x6d860000 - 0x6d86c000  C:\Program Files\Java\jdk1.6.0_16\jre\bin\verify.dll 
0x6d3e0000 - 0x6d3ff000  C:\Program Files\Java\jdk1.6.0_16\jre\bin\java.dll 
0x6d340000 - 0x6d348000  C:\Program Files\Java\jdk1.6.0_16\jre\bin\hpi.dll 
0x76bf0000 - 0x76bfb000  C:\WINDOWS\system32\PSAPI.DLL 
0x6d430000 - 0x6d459000  C:\Program Files\Java\jdk1.6.0_16\jre\bin\jdwp.dll 
0x6d750000 - 0x6d756000  C:\Program Files\Java\jdk1.6.0_16\jre\bin\npt.dll 
0x6d8a0000 - 0x6d8af000  C:\Program Files\Java\jdk1.6.0_16\jre\bin\zip.dll 
0x6d2b0000 - 0x6d2b7000  C:\Program Files\Java\jdk1.6.0_16\jre\bin\dt_socket.dll 
0x71ab0000 - 0x71ac7000  C:\WINDOWS\system32\WS2_32.dll 
0x77c10000 - 0x77c68000  C:\WINDOWS\system32\msvcrt.dll 
0x71aa0000 - 0x71aa8000  C:\WINDOWS\system32\WS2HELP.dll 
0x71a50000 - 0x71a8f000  C:\WINDOWS\System32\mswsock.dll 
0x76f20000 - 0x76f47000  C:\WINDOWS\system32\DNSAPI.dll 
0x76d60000 - 0x76d79000  C:\WINDOWS\system32\iphlpapi.dll 
0x76fb0000 - 0x76fb8000  C:\WINDOWS\System32\winrnr.dll 
0x76f60000 - 0x76f8c000  C:\WINDOWS\system32\WLDAP32.dll 
0x76fc0000 - 0x76fc6000  C:\WINDOWS\system32\rasadhlp.dll 
0x662b0000 - 0x66308000  C:\WINDOWS\system32\hnetcfg.dll 
0x71a90000 - 0x71a98000  C:\WINDOWS\System32\wshtcpip.dll 
0x10000000 - 0x1003b000  C:\DATA\ProcessDLL.dll 
0x74000000 - 0x74056000  C:\WINDOWS\system32\pdh.dll 
0x763b0000 - 0x763f9000  C:\WINDOWS\system32\comdlg32.dll 
0x773d0000 - 0x774d3000  C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\COMCTL32.dll 
0x77f60000 - 0x77fd6000  C:\WINDOWS\system32\SHLWAPI.dll 
0x7c9c0000 - 0x7d1d7000  C:\WINDOWS\system32\SHELL32.dll 
0x77a80000 - 0x77b15000  C:\WINDOWS\system32\CRYPT32.dll 
0x77b20000 - 0x77b32000  C:\WINDOWS\system32\MSASN1.dll 
0x74320000 - 0x7435d000  C:\WINDOWS\system32\ODBC32.dll 
0x711a0000 - 0x711a6000  C:\WINDOWS\system32\odbcbcp.dll 
0x77c00000 - 0x77c08000  C:\WINDOWS\system32\VERSION.dll 
0x774e0000 - 0x7761e000  C:\WINDOWS\system32\ole32.dll 
0x77120000 - 0x771ab000  C:\WINDOWS\system32\OLEAUT32.dll 
0x73000000 - 0x73026000  C:\WINDOWS\system32\WINSPOOL.DRV 
0x0b280000 - 0x0b297000  C:\WINDOWS\system32\odbcint.dll 
0x5e750000 - 0x5e75d000  C:\WINDOWS\system32\perfproc.dll 
0x6d6c0000 - 0x6d6d3000  C:\Program Files\Java\jdk1.6.0_16\jre\bin\net.dll 

VM Arguments: 
jvm_args: -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:1349 -Dfile.encoding=UTF-8 
java_command: process.info.MainClass 
Launcher Type: SUN_STANDARD 

Environment Variables: 
JAVA_HOME=C:\Program Files\Java\jdk1.6.0_16 
PATH=C:\Program Files\Java\jdk1.6.0_16\jre\bin;C:/Program Files/Java/jre6/bin/client;C:/Program Files/Java/jre6/bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Java\jdk1.6.0_16\bin;C:\Program Files\Ant\bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files\NSIS;;C:\WINDOWS\system32\WindowsPowerShell\v1.0;C:\WINDOWS\system32\WindowsPowerShell\v1.0 
USERNAME=Administrator 
OS=Windows_NT 
PROCESSOR_IDENTIFIER=x86 Family 6 Model 42 Stepping 7, GenuineIntel 



--------------- S Y S T E M --------------- 

OS: Windows XP Build 2600 Service Pack 3 

CPU:total 2 (1 cores per cpu, 1 threads per core) family 6 model 42 stepping 7, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2 

Memory: 4k page, physical 2096620k(1088228k free), swap 4036496k(3130120k free) 

vm_info: Java HotSpot(TM) Client VM (14.2-b01) for windows-x86 JRE (1.6.0_16-b01), built on Jul 31 2009 11:26:58 by "java_re" with MS VC++ 7.1 

time: Wed Apr 04 11:15:02 2012 
elapsed time: 30 seconds 

Antwort

4

Ich glaube, Sie PrecessDLL.dll ist nicht Thread-sicher. Sie müssen Ihren Code synchronisieren, um ihn nur einmal pro Zeit zugreifen zu können. Oder Sie müssen Ihre ProcessDLL.dll reparieren, um multithread-sicher zu sein.

Sie können auch Ihre JVM aktualisieren (1.6.16 ist ziemlich alt), aber ich denke nicht, dass diese Version zu dem Fehler führt.

Update

# geschah Der Absturz außerhalb der Java Virtual Machine in nativen Code.

Der bessere Ansatz (aus meiner Sicht) ist es, die DLL zu beheben.

+0

Vielen Dank für Ihre Vorschläge. Wir werden uns zuerst unsere DDL anschauen. –

+0

Es funktioniert mit Änderungen in unserer DLL. Wir haben unseren DLL-Thread sicher gemacht. Danke für deinen Tipp. –

+0

Es wäre schön, wenn Sie die Antwort akzeptieren würden, wenn es hilfreich wäre. –

Verwandte Themen