JVM定位占用cpu过高堆栈信息(Linux)

来源:互联网 发布:东京工业大学 知乎 编辑:程序博客网 时间:2024/05/30 04:30
第一步:使用top命令查看占用cpu过高进程,获取PID(这里的pid=5947)
    top
  PID USER      PR  NI  VIRT  SHR S %CPU %MEM    TIME+  COMMAND 5947 root      20   0 1794m  11m S  0.3 13.6  32:43.55 java 1176 root      20   0  185m 3608 S  0.1  0.2   7:53.12 vmtoolsd 1923 root      20   0  134m 1040 S  0.0  0.5   3:12.59 redis-server

第二步:使用top -Hp命令获取进程中线程信息(其中H:线程可见状态切换,p表示pid),这里最高的线程pid=5958

[root@agx ~]# top -Hp 5947top - 10:31:55 up 4 days, 20:44,  1 user,  load average: 0.00, 0.00, 0.00Tasks:  47 total,   0 running,  47 sleeping,   0 stopped,   0 zombieCpu(s):  0.3%us,  0.2%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stMem:   1922208k total,  1795408k used,   126800k free,   368404k buffersSwap: 10485756k total,     1796k used, 10483960k free,   806448k cached  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 5958 root      20   0 1794m 256m  11m S  0.3 13.6   4:47.17 java 5968 root      20   0 1794m 256m  11m S  0.3 13.6   5:14.80 java 5947 root      20   0 1794m 256m  11m S  0.0 13.6   0:00.00 java 5948 root      20   0 1794m 256m  11m S  0.0 13.6   0:01.24 java

第三步:获取最高的线程pid(十进制,装换成十六进制),这里用python -c "print hex(线程PID)"

[root@agx ~]# python -c "print hex(5958)"0x1746

第四步:查看线程堆栈信息,jstack pid(进程pid) | grep 线程pid</span>
[root@agx ~]# jstack 5947 | grep -C10 0x1746at java.lang.reflect.Method.invoke(Method.java:606)at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:321)at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:455)"VM Thread" prio=10 tid=0x00007f9448064000 nid=0x173f runnable"GC task thread#0 (ParallelGC)" prio=10 tid=0x00007f944801e800 nid=0x173d runnable"GC task thread#1 (ParallelGC)" prio=10 tid=0x00007f9448020800 nid=0x173e runnable"VM Periodic Task Thread" prio=10 tid=0x00007f944809b800 nid=0x1746 waiting on conditionJNI global references: 234






0 0
原创粉丝点击