Ich weiß, dass diese Antwort spät kommt, aber der teure Teil von jstack kommt vom Anschließen an die Debugger-Schnittstelle und nicht vom allgemeinen Generieren der Stack-Traces mit einer wichtigen Ausnahme (und die Heap-Größe spielt überhaupt keine Rolle):
Beliebige Stack-Traces können nur an einem sicheren Punkt generiert werden oder während der Thread auf eine Ressource wartet (außerhalb des Java-Bereichs). Wenn der Thread außerhalb des Java-Bereichs wartet, trägt der Thread, der die Stack-Abfrage durchführt, die Aufgabe aus, indem er den Stack selbst durchläuft. Sie möchten jedoch möglicherweise nicht einen Thread "unterbrechen", um seinen eigenen Stack zu durchlaufen, insbesondere wenn er ein Sperre hält (oder ein Busy-Wait durchführt). Da es keine Möglichkeit gibt, die sicheren Punkte zu steuern - das ist ein Risiko, das berücksichtigt werden muss.
Eine andere Option im Vergleich zu jstack, um das Anschließen an die Debug-Schnittstelle zu vermeiden: Thread.getAllStackTraces() oder die Verwendung des ThreadMXBean, führen Sie es im Prozess aus, speichern Sie es in einer Datei und verwenden Sie ein externes Tool, um diese Datei abzufragen.
Letzte Anmerkung: Ich liebe jstack, es ist großartig auf Produktionssystemen.
0 Stimmen
Hast du darüber nachgedacht zu messen?
0 Stimmen
Statt jstack als separaten Prozess auszuführen, was halten Sie davon, einen einfachen Profiler innerhalb der Anwendung laufen zu lassen? Das wäre effizienter, da kein Netzwerkoverhead erforderlich ist. Ich habe ein solches Tool geschrieben: code.google.com/p/h2database/source/browse/trunk/h2/src/main/… - Sie können es bei Bedarf auch in eine .jsp-Datei konvertieren.
0 Stimmen
@Thorbjørn Ravn Andersen : Verzeihung?
0 Stimmen
@Thomas Mueller: Vielen Dank, ich werde mir dein Tool ansehen. Aber "kein Netzwerkoverhead"? Ich glaube nicht, dass das wirklich ein Problem ist - ich habe ein schnelles Netzwerk und die Ausgabe von einem dieser Überwachungsansätze wird sich nicht in vielen Bytes auf der Leitung summieren.
0 Stimmen
Diese Version ist APL und hat keine Abhängigkeiten: svn.apache.org/repos/asf/jackrabbit/sandbox/jackrabbit-j3/src/…
0 Stimmen
Die Frage handelt von der Statistiksammlung, aber die Antworten drehen sich um Thread-Dumps? Ich nehme an, der OP spricht über die Verwendung von Optionen wie
-gcutil
mit jstack, und ich frage mich dasselbe wie der OP.0 Stimmen
@haridsv Nein, ich habe
-gcutil
nicht verwendet... Ich wollte die Stapelabläufe für alle meine laufenden Threads.0 Stimmen
@StuThompson Es tut mir leid, ich habe irgendwie
jstack
alsjstat
gelesen, jetzt machen die Antworten mehr Sinn.