jstack 分析JVM 堆栈信息

603 阅读1分钟

通常服务进程没有挂掉的情况下可以使用如下命令

1.在线输出线程栈到文件,进行离线分析

1.1 输出线程栈信息到jstack.log 然后重启服务,继续分析线程栈文件

# java进程正在运行 输出线程栈到文件
jstack -l pid >jstack.log

# java进程已经hung process 输出线程栈到文件
jstack -F -l pid >jstack.log

# 根据线程状态关键字过滤
cat jstack.log|grep lock -C20

1.2 关注的线程状态

     死锁-Deadlock(重点关注)
     阻塞-Blocked(重点关注)  
     等待资源-Waiting on condition(重点关注)
     等待获取监视器-Waiting on monitor entry(重点关注)
     执行中-Runnable
     暂停-Suspended
     对象等待中-Object.wait() 或 TIMED_WAITING
     停止-Parked
     

1.3 类似的输出结果,表示存在死锁

Found one Java-level deadlock:
=============================
"Thread-1":
  waiting to lock monitor 0x00007f0134003ae8 (object 0x00000007d6aa2c98, a java.lang.Object),
  which is held by "Thread-0"
"Thread-0":
  waiting to lock monitor 0x00007f0134006168 (object 0x00000007d6aa2ca8, a java.lang.Object),
  which is held by "Thread-1"

Java stack information for the threads listed above:
===================================================
"Thread-1":
    at javaCommand.DeadLockclass.run(JStackDemo.java:40)
    - waiting to lock <0x00000007d6aa2c98> (a java.lang.Object)
    - locked <0x00000007d6aa2ca8> (a java.lang.Object)
    at java.lang.Thread.run(Thread.java:745)
"Thread-0":
    at javaCommand.DeadLockclass.run(JStackDemo.java:27)
    - waiting to lock <0x00000007d6aa2ca8> (a java.lang.Object)
    - locked <0x00000007d6aa2c98> (a java.lang.Object)
    at java.lang.Thread.run(Thread.java:745)

Found 1 deadlock.

2.对线程栈在线分析

Usage:
    jstack [-l] <pid>
        (to connect to running process)
    jstack -F [-m] [-l] <pid>
        (to connect to a hung process)
    jstack [-m] [-l] <executable> <core>
        (to connect to a core file)
    jstack [-m] [-l] [server_id@]<remote server IP or hostname>
        (to connect to a remote debug server)

Options:
    -F  to force a thread dump. Use when jstack <pid> does not respond (process is hung)
    -m  to print both java and native frames (mixed mode)
    -l  long listing. Prints additional information about locks
    -h or -help to print this help message