2012-11-13 8 views
7

Ho bisogno di sbirciare nella pila di 2 thread deadlock per analizzare la situazione. Il JVM è attivo in questo momento e i dati sono lì, ma ho bisogno di qualche tipo di strumento per estrarlo dal processo. Mi interessa solo 6 variabili nello stack di tipo String. Qualsiasi idea è molto apprezzata. JVM versioni 6_35, è un linux, JMX è abilitato, ma non ho una connessione profiler/debugger configurata su di esso. È molto difficile da riprodurre.Posso scaricare le variabili dello stack di thread correnti da una JVM live?

+3

Ciao down-voter? – ShiDoiSi

risposta

3

Non è possibile farlo facilmente. Lo strumento normale jstack eseguirà il dump dello stack. Tecnicamente puoi provare a scaricare l'intero heap (usando jmap) ma cercare queste variabili particolari può essere un problema se possibile.

Si noti che questo non è facilmente fattibile per motivi di sicurezza. Le tracce dello stack possono contenere credenziali o altri dati sensibili.

+2

Dubito che sia per motivi di sicurezza, "non facilmente fattibile" non è mai un buon approccio per quanto riguarda l'hacking. Solo i miei 2 centesimi. –

0

È possibile inviare il processo un SIGQUIT che vi darà un dump and keep the VM running, su un sistema operativo Unix-like con il Sole/Oracle JVM, così come IBM's JVM - non so se l'uscita sarà adatto per i vostri scopi, duro. Probabilmente simile a jstack/jmap nell'altra risposta.

+0

Questo dà solo un dump del thread (la sequenza di metodi chiamati per ogni thread) non lo stato delle variabili in ogni thread. –

1

Ho trovato un piccolo trucco utilizzando un visualizzatore di heap di heap (YourKit in questo caso, ma potrebbero esserlo anche altri). Fondamentalmente si enumerano tutte le istanze della classe Thread, quindi si trova il thread desiderato per nome e lo si apre. Le variabili di stack sono contrassegnati come < variabile locale> come questo:

enter image description here

Non tutte le variabili sono qui, ma vengono visualizzati tutti quelli che sono passati come argomenti al metodo. Mi chiedo se i profiler possano risolvere questo problema ancora meglio?

Problemi correlati