java jstack和jmap的基本使用

1、jps -lmv 查找要分析的java进程

2、查出最耗CPU线程 top -Hp pid  ( top -Hp 73838)
126453 root      20   0   16.6g   6.5g      0 S  2.2 20.6   0:19.31 java
126243 root      20   0   16.6g   6.5g      0 S  1.9 20.6   0:26.59 java
 84628 root      20   0   16.6g   6.5g      0 S  1.6 20.6   0:08.29 java
118500 root      20   0   16.6g   6.5g      0 S  0.9 20.6   0:32.64 java
126340 root      20   0   16.6g   6.5g      0 S  0.9 20.6   0:20.54 java
126536 root      20   0   16.6g   6.5g      0 S  0.9 20.6   0:25.99 java
 84656 root      20   0   16.6g   6.5g      0 S  0.9 20.6   0:07.01 java
 90628 root      20   0   16.6g   6.5g      0 S  0.9 20.6   0:00.80 java
 75241 root      20   0   16.6g   6.5g      0 S  0.6 20.6   4:23.77 java
 75363 root      20   0   16.6g   6.5g      0 S  0.6 20.6  92:06.08 java
  5138 root      20   0   16.6g   6.5g      0 S  0.6 20.6   0:19.65 java
 90617 root      20   0   16.6g   6.5g      0 S  0.6 20.6   0:00.86 java
3、通过线程ID转换16进制,printf "%x\n" tid
 printf "%x\n" 126453  (1edf5)

4、追踪线程内部,查看load过高原因。通过命令: jstack 73838 > /tmp/tinfo.txt,将线程堆里面的信息全部保存下来

5、通过转换的16进制 就可以去tinfo.txt 里面查找对应的线程
"https-jsse-nio-8080-exec-1930" #2459769 daemon prio=5 os_prio=0 tid=0x00007fd288bac000 nid=0x1edf5 waiting on condition [0x00007fd0d8994000]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x00000005d916b4c8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
        at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
        at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:89)
        at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:33)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1073)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)
6、jmap 进程id(73838)  得到实例在内存中的使用情况
    jmap -histo:live 73838 > /tmp/jmap.txt
       more /tmp/jmap.txt |grep hanshow| head -n 100   # 查看前100个

猜你喜欢

转载自blog.csdn.net/CTLLIN/article/details/115110850