Linux中如何精准定位JVM线程CPU过高

    此文提供一种方法来快速定位Linux中JVM的线程CPU过高的问题。运行在Linux上的JVM的一个核心概念是:Java线程通过native threads实现,这导致Java中的每个线程对应着一个独立的Linux进程。
    仍然需要生成jvm进程的thread dump data,便于与Linux top命令输出关联。步骤如下:
    1)执行top命令,或使用-H选项(显示所有线程),找到相关的高CPU的PID
    2)生成thread dump 快照(kill -3 PID)。
    3)将top命令输出PID转换为HEX格式(16进制)
    4)在thread dump data中搜索nid=<Hex PID>
    5)分析受影响的thread和stack trace,精确定位代码。
top output sample
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
...........
22111 userWLS 9 0 86616 84M 26780 S 0.0 40.1 0:00 java


Thread Dump output sample Thread as per the above search criteria nid=0x565F

"ExecuteThread: '0' for queue: 'default'" daemon prio=1 tid=0x83da550 nid=0x565F waiting on monitor [0x56138000..0x56138870]
  at java.util.zip.ZipFile.getEntry(Native Method)
  at java.util.zip.ZipFile.getEntry(ZipFile.java:172)
  at java.util.jar.JarFile.getEntry(JarFile.java:269)
  at java.util.jar.JarFile.getJarEntry(JarFile.java:252)
  at sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:989)
  at sun.misc.URLClassPath$JarLoader.findResource(URLClassPath.java:967)
  at sun.misc.URLClassPath.findResource(URLClassPath.java:262)
  at java.net.URLClassLoader$4.run(URLClassLoader.java:763)
  at java.security.AccessController.doPrivileged(AccessController.java:224)
  at java.net.URLClassLoader.findResource(URLClassLoader.java:760)
  at java.lang.ClassLoader.getResource(ClassLoader.java:444)
  at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:504)
  ............................................  

这里可以参考下:http://www.cnitblog.com/tjitty/archive/2010/07/12/67429.html文章,直接查看主进程下所有线程CPU使用情况。

    pidstat  -T CHILD -r 2 5  //表示所有子进程在2到5秒内,内存的使用状况,只有minflt/s或majflt/s非零的进程才会被列出来。
-T 后边跟 CHILD 表示全局统计所选进程以及其子进程占用cpu或内存的情况如果跟TASK 表示,所有独立进程,默认选项就是TASK, 还可以跟ALL是CHILD和TASK加起来的结果. 值得注意的是,全局统计进程以及子进程并不是pidstat所有选项都可用的,并且也不适用于某个时间段:当进程运行完毕或者进程被中止后才会收集到相关的统计数据。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值