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?
risposta
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.
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. –
È 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.
Questo dà solo un dump del thread (la sequenza di metodi chiamati per ogni thread) non lo stato delle variabili in ogni thread. –
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:
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?
- 1. Come ottenere variabili locali da una cornice stack sulla JVM
- 2. Dimensioni dello stack di thread sicuro?
- 3. Come posso scaricare tutti gli stack di un processo Go?
- 4. Come posso estrarre variabili locali da una traccia di stack?
- 5. Posso ottenere le variabili locali del metodo attraverso una traccia dello stack in C#?
- 6. JVM - Heap and Stack
- 7. Posso ottenere le tracce dello stack di tutti i thread nella mia app C#?
- 8. Come posso scaricare tutte le variabili PHP nell'ambito corrente?
- 9. Stack stack di tutte le discussioni attive
- 10. C# Come scaricare tutte le variabili e i valori correnti durante il runtime
- 11. dimensioni dello stack di thread su Windows (Visual C++)
- 12. thread logici correnti in aumento/perdita di thread in uscita
- 13. OCAMLRUNPARAM non influenza le dimensioni dello stack
- 14. Dove sono le variabili di istanza di un oggetto memorizzato nella JVM?
- 15. Le variabili di stack C sono memorizzate al contrario?
- 16. Individuazione della traccia dello stack effettivo Java da una traccia stack javascript
- 17. Variabile dello stack di restituzione?
- 18. Bytecode JVM, come posso trovare il tipo di variabili locali?
- 19. C++ overflow dello stack
- 20. Lettura dello stack stack per iOS Webkit
- 21. Stack C++ thread-safe
- 22. Il compilatore è autorizzato a ottimizzare l'utilizzo della memoria dello stack riordinando le variabili locali?
- 23. GetCPUDescriptorHandleForHeapStart corruzione dello stack
- 24. In che modo Rust sposta le variabili dello stack che non sono copiabili?
- 25. Rilevamento dello stack pieno
- 26. direzione di crescita dello stack
- 27. Il frame nell'heap JVM è allocato o stack allocato?
- 28. Stampa traccia dello stack da un gestore di segnale
- 29. In che modo l'utilità perf di linux capisce le tracce dello stack? utility perf
- 30. Posso scaricare e ricaricare dinamicamente (altre versioni dello stesso) JAR?
Ciao down-voter? – ShiDoiSi