jstack ist ein Befehl, der mit dem JDK geliefert wird. Wenn auf einem Computer Java ausgeführt wird, können Sie den Prozessstatus problemlos abrufen, ohne ein spezielles Überwachungstool installieren zu müssen.
Dieses Tool zeigt einen Thread-Dump in der Befehlszeilenkonsole an. Sie können es verwenden, wenn Sie die Java-PID kennen. Mit diesem Tool können Sie den Thread-Status abrufen und untersuchen, wenn die Leistung nicht gut ist oder wenn ein Phänomen wie Dead Lock auftritt.
Usage
$ jstack -l <pid>
Sie können die Stapelverfolgung für jeden Thread im Ausgabeergebnis überprüfen.
"Thread-0" #12 prio=5 os_prio=0 cpu=0.00ms elapsed=496.25s tid=0x00007f6a741f1800 nid=0x1a5 waiting on condition [0x00007f6a17a9f000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep([email protected]/Native Method)
at Server.sleepForever(Server.java:20)
at Server.lambda$0(Server.java:9)
at Server$$Lambda$1/0x0000000840060840.run(Unknown Source)
at java.lang.Thread.run([email protected]/Thread.java:834)
"Thread-1" #13 prio=5 os_prio=0 cpu=0.00ms elapsed=496.25s tid=0x00007f6a741f3800 nid=0x1a6 waiting on condition [0x00007f6a1798f000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep([email protected]/Native Method)
at Server.sleepForever(Server.java:20)
at Server.lambda$0(Server.java:9)
at Server$$Lambda$1/0x0000000840060840.run(Unknown Source)
at java.lang.Thread.run([email protected]/Thread.java:834)
"Thread-2" #14 prio=5 os_prio=0 cpu=0.00ms elapsed=496.25s tid=0x00007f6a741f5000 nid=0x1a7 waiting on condition [0x00007f6a1787f000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep([email protected]/Native Method)
at Server.sleepForever(Server.java:20)
at Server.lambda$0(Server.java:9)
at Server$$Lambda$1/0x0000000840060840.run(Unknown Source)
at java.lang.Thread.run([email protected]/Thread.java:834)
Wenn beispielsweise Java in mehreren Threads ausgeführt wird und ein Phänomen wie ein Thread auftritt, der viel CPU-Auslastung oder Arbeitsspeicher verbraucht, kann dies wie folgt angegeben werden.
(1) Identifizieren Sie den Prozess, der Ressourcen aus dem Prozess verbraucht.
$ top -H -b -n 1 -p ${Java Pid}
Rufen Sie die ressourcenintensive PID mit dem obigen Befehl ab
(2) Konvertieren Sie die PID in hexadezimal und grep aus dem Ergebnis von jstack ③ Da der Trace, der mit der NID- und Hexadezimalzahl übereinstimmt, ein ressourcenintensiver Prozess ist, folgen Sie von dort aus.
Es ist möglich, in einem solchen Fluss zu untersuchen.
Recommended Posts