JVM调优之jstack找出最耗cpu的线程并定位代码

http://blog.csdn.net/u010214092/article/details/77749068
第一步:先找出java的进程Id(PID) 假设java应用名称是zcg_commodity

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,查看哪个对象生成异常,就可以定位问题大方向

第四步:

查代码

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 参数设置 在Java虚拟机的参数中,有3种表示方法用“ps -ef |grep "java"命令,可以得到当前Ja...
    九问阅读 9,190评论 2 52
  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,172评论 0 23
  • 作者:一字马胡 转载标志 【2017-11-12】 更新日志 日期更新内容备注 2017-11-12新建文章初版 ...
    beneke阅读 2,235评论 0 7
  • 为什么我的眼睛离不开你, 你好像也没有什么魅力, 你发着光,却不明亮, 不像星星。 你是最舒服的,最柔和的。 但是...
    不可知的盲阅读 165评论 0 0
  • 在知乎上认识了一个姐姐,前几天她和我说在纠结要不要回家过节。我有些纳闷,中秋是团圆的日子,这个没有纠结的必要呀。姐...
    梓文儿阅读 782评论 0 0