美文网首页
【java】结合top和jstack找出占用cpu最高的堆栈信息

【java】结合top和jstack找出占用cpu最高的堆栈信息

作者: Bogon | 来源:发表于2022-04-14 00:03 被阅读0次
    1. top 找到CPU占用最高的pid

    2. top -Hp ${pid} 找到CPU占用最高的线程id记录一下

    3. jstack -l ${pid} > 工程名_jstack.txt 导出线程详情

    4. 分析(开发参与)根据线程id(转换为16进制),可以从工程名_jstack.txt定位到 具体代码行

    5. 将工程名_jstack.txt用可视化在线分析工具来分析 : https://heaphero.io/index.jsp

    image.png

    以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题。

    根据top命令,发现pid为28555的Java进程占用CPU高达200%,出现故障。

    通过ps aux | grep ${pid} 命令,可以进一步确定是tomcat进程出现了问题。但是,怎么定位到具体线程或者代码呢?

    首先显示线程列表:

    ps -mp ${pid} -o THREAD,tid,time

    找到了耗时最高的线程28802,占用CPU时间快两个小时了!

    其次将需要的线程ID(tid)转换为16进制格式:

    printf "%x\n" ${tid}

    最后打印线程的堆栈信息:

    jstack -l ${pid} > jstack.txt

    grep "xxx" -A 30 jstack.txt
    注:xxx为16进制格式的tid

    基本上,就找到出现问题的代码了!

    参考

    top -Hp pid 显示所有的线程
    https://www.cnblogs.com/muahao/p/6266859.html

    结合top和jstack找出占用cpu最高的堆栈信息
    https://blog.csdn.net/u013593306/article/details/52468651

    线上应用故障排查系列
    http://www.blogjava.net/hankchen/archive/2012/05/09/377738.html

    相关文章

      网友评论

          本文标题:【java】结合top和jstack找出占用cpu最高的堆栈信息

          本文链接:https://www.haomeiwen.com/subject/rqyzsrtx.html