El uso de jvm jstack

A veces necesitamos verificar la ejecución de los hilos en el jvm. Por ejemplo, encontramos que la carga de la CPU del servidor ha aumentado repentinamente, se han producido interbloqueos y bucles infinitos. ¿Cómo debemos analizarlo?

Dado que el programa se ejecuta normalmente, no hay salida y no se puede ver ningún problema en el registro, por lo que debe observar la ejecución de los subprocesos internos de jvm y luego analizar y averiguar el motivo.
En este momento, necesita usar el comando jstack.La función de jstack es tomar una instantánea de la situación del subproceso del jvm en ejecución e imprimirla.

uso de jstack

#用法:jstack <pid>
[root@node01 bin]# jstack 2203
Full thread dump Java HotSpot(TM) 64‐Bit Server VM (25.141‐b15 mixed
mode):
"Attach Listener" #24 daemon prio=9 os_prio=0 tid=0x00007fabb4001000
nid=0x906 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"http‐bio‐8080‐exec‐5" #23 daemon prio=5 os_prio=0 tid=0x00007fabb057c000
nid=0x8e1 waiting on condition [0x00007fabd05b8000]
java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
‐ parking to wait for <0x00000000f8508360> (a
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awa
it(AbstractQueuedSynchronizer.java:2039)
    
at
java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:44
2)
    
    at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:104)
    at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32)
at
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1
074)
    
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java
:1134)
    
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.jav
a:624)
    
at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread
.java:61)
    
    at java.lang.Thread.run(Thread.java:748)
"http‐bio‐8080‐exec‐4" #22 daemon prio=5 os_prio=0 tid=0x00007fab9c113800
nid=0x8e0 waiting on condition [0x00007fabd06b9000]
java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
‐ parking to wait for <0x00000000f8508360> (a
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awa
it(AbstractQueuedSynchronizer.java:2039)
    
at
java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:44
2)
    
    at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:104)
    at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32)
at
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1
074)
    
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java
:1134)
    
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.jav
a:624)
    
at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread
.java:61)
    
    at java.lang.Thread.run(Thread.java:748)
"http‐bio‐8080‐exec‐3" #21 daemon prio=5 os_prio=0 tid=0x0000000001aeb800
nid=0x8df waiting on condition [0x00007fabd09ba000]
java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
‐ parking to wait for <0x00000000f8508360> (a
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awa
it(AbstractQueuedSynchronizer.java:2039)
    
    at

Supongo que te gusta

Origin blog.csdn.net/a772304419/article/details/126679503
Recomendado
Clasificación