2010-09-05 15 views
8

Ho un'app java server di base con 100 thread di lavoro che eseguono semplici richieste HEAD sugli URL. Sto usando HttpClient 4.x per questo.Impossibile ottenere il dump del thread? Qualche idea per cui la mia app blocca?

A pochi minuti di distanza il mio programma si blocca solo per un paio di minuti e non riesco a capire perché. Guarda la schermata di ciò che i rapporti visivi di vm monitor segnalano. Puoi vederlo flatline. Durante questo periodo non riesco a ottenere un buon dump del thread e visual vm si blocca solo finché non viene sbloccato. Qualcuno ha qualche idea su cosa posso fare per provare a iniziare il debug di questo ragazzo?

visivo VM: http://tinypic.com/view.php?pic=2i915bs&s=7

Ecco l'uscita quando ho cercato di prendere una discarica jstack mentre era ghiacciato:

jstack -F 4325 
Attaching to process ID 4325, please wait... 
Debugger attached successfully. 
Server compiler detected. 
JVM version is 16.3-b01 
Deadlock Detection: 

No deadlocks found. 

Thread 4557: (state = BLOCKED) 
Error occurred during stack walking: 
sun.jvm.hotspot.debugger.DebuggerException: sun.jvm.hotspot.debugger.DebuggerException: get_thread_regs failed for a lwp 
    at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$LinuxDebuggerLocalWorkerThread.execute(LinuxDebuggerLocal.java:152) 
    at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.getThreadIntegerRegisterSet(LinuxDebuggerLocal.java:466) 
    at sun.jvm.hotspot.debugger.linux.LinuxThread.getContext(LinuxThread.java:65) 
    at sun.jvm.hotspot.runtime.linux_amd64.LinuxAMD64JavaThreadPDAccess.getCurrentFrameGuess(LinuxAMD64JavaThreadPDAccess.java:92) 
    at sun.jvm.hotspot.runtime.JavaThread.getCurrentFrameGuess(JavaThread.java:256) 
    at sun.jvm.hotspot.runtime.JavaThread.getLastJavaVFrameDbg(JavaThread.java:218) 
    at sun.jvm.hotspot.tools.StackTrace.run(StackTrace.java:76) 
    at sun.jvm.hotspot.tools.StackTrace.run(StackTrace.java:45) 
    at sun.jvm.hotspot.tools.JStack.run(JStack.java:60) 
    at sun.jvm.hotspot.tools.Tool.start(Tool.java:221) 
    at sun.jvm.hotspot.tools.JStack.main(JStack.java:86) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at sun.tools.jstack.JStack.runJStackTool(JStack.java:118) 
    at sun.tools.jstack.JStack.main(JStack.java:84) 
Caused by: sun.jvm.hotspot.debugger.DebuggerException: get_thread_regs failed for a lwp 
    at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.getThreadIntegerRegisterSet0(Native Method) 
    at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.access$800(LinuxDebuggerLocal.java:51) 
    at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$1GetThreadIntegerRegisterSetTask.doit(LinuxDebuggerLocal.java:460) 
    at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$LinuxDebuggerLocalWorkerThread.run(LinuxDebuggerLocal.java:127) 
+0

Ho anche questo problema e sembra (nessuna garanzia) che accada per lo più su jvms a 64 bit. – whiskeysierra

+0

le richieste vanno tutte allo stesso server? (sei sicuro che non sia il server che non risponde alla richiesta?) –

risposta

0

Molto likley a causa di utilizzo della memoria troppo causando GC. Aggiungere il params a java:

-verbosegc -XX:+PrintGCDetails 

e vedere se si nota qualcosa di evidente nell'output/logs

+0

Lo screenshot mostra meno di 100 MB di spazio utilizzato e 0 attività GC. –

4

Ho visto diverse segnalazioni sulle jstack su Linux con una traccia simile:

Si ottiene lo stesso risultato con uno kill -3 <pid>?

0

Ciò che ha funzionato per me era jstack in esecuzione come proprietario del processo senza-F.

Problemi correlati