2016-04-01 9 views
0

Ich möchte wie dieserGibt es eine einfache Möglichkeit, einen Jstack für jeden laufenden jvm zu generieren?

jstack gehen ALLE

oder so ähnlich, so kann ich den Thread-Dump für alle JVMs auf meinem System zu bekommen.

Kann es getan werden?

+0

Sie scheinen nach dem (nicht unterstützten) ['jstack'] (https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstack.html) Befehl zu fragen, den ich vermute mit einigen Versionen von Oracle Java Developer Kit verpackt. Das ist also eigentlich keine Java-Frage * per se *, obwohl sie natürlich Java-bezogen ist. Ich habe das [bash] -Tag hinzugefügt, aber wenn Sie daran interessiert sind, dies unter Windows zu tun, dann könnte ein anderes besser geeignet sein. –

+0

Ich brauche keine Windows-Hilfe, aber es könnte jemand anderen helfen –

Antwort

2

Die jstack command reference bietet diese drei Aufrufformen:

jstack [ options ] pid 

jstack [ options ] executable core 

jstack [ options ] [ [email protected] ] remote-hostname-or-IP 

Von denen nur die erste ist relevant für JVMs aktuell läuft auf dem gleichen System, wo jstack läuft. Daher müssen Sie die JVM-Prozesse anhand ihrer PIDs identifizieren.

In seiner Zusammenfassung der pid Argument, die Bezugsnoten:

Um eine Liste von Java zu erhalten Prozesse auf einem Computer ausgeführt wird, verwenden Sie die JPS (1) Befehl.

Vermutlich, wenn Sie jstack zur Verfügung haben, dann haben Sie auch jps. Die Dokumentation schlägt vor, dass Sie jps -q verwenden können, um nur die relevanten PIDs zu erhalten, die Sie also nicht massieren müssen. In Anbetracht, dass Sie so etwas wie dies in bash tun könnte:

for vmpid in $(jps -q); do 
    jstack $vmpid 
done 

Offensichtlich jps ist in Java implementiert, denn ich finde, dass sie sich selbst berichtet. Wenn Sie das stört, dann könnte das obige optimiert werden, um jps selbst herauszufiltern.

1

Sie könnten die folgenden in Ihrem Terminal laufen:

ps -e | grep [j]ava | awk '{print $1}' | xargs -n 1 jstack 
+0

'jps' könnte eine bessere Wahl sein, da es Ihnen nur die Java-Prozesse gibt, mit denen Sie sich verbinden können. –

Verwandte Themen