web-dev-qa-db-fra.com

Comment obtenir une trace complète de la pile d'un programme Java Java qui utilise 100% de processeur)?

J'ai une instance jenkins qui est coincée dans une sorte de boucle sans fin sans aucune activité visible.

Je peux obtenir le pid du processus en cours, alors comment générer une trace que je peux utiliser pour un rapport de bogue?

Je cours sur Linux.

22
sorin

Essayez avec jstack . Cela vous donnera une liste complète de ce que font vos discussions. Tout ce dont il a besoin, c'est du processus pid.

31
mprivat

Prenez une décharge de fil. Connectez-vous via Visual VM et demandez un vidage. Ou si sur unix alors kill -3 pid ou sur windows Ctrl + Break sur le processus console le ferait pour vous. Le vidage va directement à la console. Vous pouvez également utiliser jstack pour lancer un vidage.

11
Drona

Dans * nix, avec top en appuyant sur H vous pouvez voir les threads.

Ensuite, avec jps, vous pouvez voir le pid garder à l'esprit que si le processus a été démarré avec des privilèges, vous devez l'exécuter avec Sudo par exemple.

Si vous prenez l'ID de thread et le convertissez en hexadécimal, vous pouvez croiser ces données avec le jstack pid production.

Les deux outils sont dans $Java_HOME/bin.

4
ssedano

Ctrl+\ sur linux (qui envoie SIGQUIT)

Ctrl+Break sur Windows (qui envoie SIGBREAK sous MSVCRT)

4
pbielicki

Jetez un œil à VisualVM . Il y a beaucoup d'outils de profilage Nice avec, et vous pouvez effectuer un vidage de thread.

2
Nican