JVM调优之jstack找出最耗cpu的线程并定位代码
2017-08-31 16:36
267 查看
第一步:先找出java的进程Id(PID) 假设java应用名称是zcg_commodity
ps -ef|grep zcg_commodity
![](https://img-blog.csdn.net/20170831163440999?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIxNDA5Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
得到进程Id为32464
第二步:找出该进程内最消耗CPU的线程
top -Hp pid
输入top -Hp 32464
![](https://img-blog.csdn.net/20170831163502993?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIxNDA5Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
TIME列就是各个java线程耗费的CPU的时间,比如图中是线程ID的为2012的线程,
通过 printf “%x\n” 2012
得到2012的十六进制为 7dc
第三步:
一般会进到jdk的bin目录下,root权限执行
jstack 32464|grep 7dc
PollIntervalRetrySchedulerThread” prio=10 tid=0x00007f950043e000 nid=0x54ee in Object.wait()
定位问题所在
之前有遇到前几个消耗CPU的线程都是GC的,那可能是短时间内存泄露严重,导致GC回收不过来,导致CPU短时间飙升
这种情况用jmap -histo:live 32464 |head -20,查看哪个对象生成异常,就可以定位问题大方向
第四步:
查代码
ps -ef|grep zcg_commodity
得到进程Id为32464
第二步:找出该进程内最消耗CPU的线程
top -Hp pid
输入top -Hp 32464
TIME列就是各个java线程耗费的CPU的时间,比如图中是线程ID的为2012的线程,
通过 printf “%x\n” 2012
得到2012的十六进制为 7dc
第三步:
一般会进到jdk的bin目录下,root权限执行
jstack 32464|grep 7dc
PollIntervalRetrySchedulerThread” prio=10 tid=0x00007f950043e000 nid=0x54ee in Object.wait()
定位问题所在
之前有遇到前几个消耗CPU的线程都是GC的,那可能是短时间内存泄露严重,导致GC回收不过来,导致CPU短时间飙升
这种情况用jmap -histo:live 32464 |head -20,查看哪个对象生成异常,就可以定位问题大方向
第四步:
查代码
相关文章推荐
- JVM调优之jstack找出最耗cpu的线程并定位代码
- JVM调优之jstack找出最耗cpu的线程并定位代码
- JVM调优之jstack找出最耗cpu的线程并定位代码
- JVM调优之jstack找出最耗cpu的线程并定位代码
- JVM调优之jstack找出最耗cpu的线程并定位代码
- JVM调优之jstack找出最耗cpu的线程并定位代码
- 转载-JVM调优之jstack找出最耗cpu的线程并定位代码
- JVM调优之jstack找出最耗cpu的线程并定位代码
- JVM调优之jstack找出最耗cpu的线程并定位代码
- JVM调优之jstack找出最耗cpu的线程并定位代码
- JVM调优之jstack找出最耗cpu的线程并定位代码
- JVM调优之jstack找出最耗cpu的线程并定位代码
- JVM调优-使用jstack找出耗费CPU的线程及代码
- 利用jstack命令定位占用cpu高的java线程及具体错误代码信息
- JVM六:查找最最耗cpu的线程或线程时间最长并定位代码
- JVM调优之jstack找出发生死锁的线程
- 利用jstack命令定位占用cpu高的java线程及具体错误代码信息
- 【JVM性能调优】使用jstack找出最耗CPU的java线程
- 通过Jstack分析CPU占用的线程查找到对应的线程代码
- JVM 找出最耗 cpu的线程 并打印线程栈