1. 线用top命令找出CPU占比最高的
    2. ps -ef 或者 jps 进一步定位得知是怎样一个后台程序
    3. 定位到具体线程或者代码
    4. 将需要的线程id转换位16进制歌是(英文小写)
    5. jstack pid | grep tid (16进制线程ID小写英文)-A60

    案例

    1. top

    image.png

    1. jps -l 或者 ps -ef|grep java|grep -v grep

    image.png

    1. ps -mp 48951 -o THREAD,tid,time 或者 top -Hp 48951

    image.png
    image.png
    image.png

    1. printf “%x\n” 48960

    image.png

    1. jstack 48951 | grep bf40 -A60

    image.png

    1. [silver@localhost ~]$ jstack 48951 | grep bf40 -A60
    2. "VM Periodic Task Thread" os_prio=0 tid=0x00007ff5c00bb000 nid=0xbf40 waiting on condition
    3. JNI global references: 311
    4. Found one Java-level deadlock:
    5. =============================
    6. "Thread-1":
    7. waiting to lock monitor 0x00007ff5a40062c8 (object 0x00000000f0c5d458, a java.lang.Object),
    8. which is held by "Thread-0"
    9. "Thread-0":
    10. waiting to lock monitor 0x00007ff5a4004e28 (object 0x00000000f0c5d468, a java.lang.Object),
    11. which is held by "Thread-1"
    12. Java stack information for the threads listed above:
    13. ===================================================
    14. "Thread-1":
    15. at JstackDeadLockDemo.calLock_Obj2_First(JstackDeadLockDemo.java:49)
    16. - waiting to lock <0x00000000f0c5d458> (a java.lang.Object)
    17. - locked <0x00000000f0c5d468> (a java.lang.Object)
    18. at JstackDeadLockDemo.lambda$testDeadlock$1(JstackDeadLockDemo.java:23)
    19. at JstackDeadLockDemo$$Lambda$2/1418481495.run(Unknown Source)
    20. at java.lang.Thread.run(Thread.java:748)
    21. "Thread-0":
    22. at JstackDeadLockDemo.calLock_Obj1_First(JstackDeadLockDemo.java:36)
    23. - waiting to lock <0x00000000f0c5d468> (a java.lang.Object)
    24. - locked <0x00000000f0c5d458> (a java.lang.Object)
    25. at JstackDeadLockDemo.lambda$testDeadlock$0(JstackDeadLockDemo.java:22)
    26. at JstackDeadLockDemo$$Lambda$1/471910020.run(Unknown Source)
    27. at java.lang.Thread.run(Thread.java:748)
    28. Found 1 deadlock.