美文网首页
排查Java程序CPU占用过高问题

排查Java程序CPU占用过高问题

作者: 尼小摩 | 来源:发表于2019-12-02 19:57 被阅读0次

    今早到公司通过性能监控平台发现有段时间的TP耗时达到了200ms,看到这种情况比较诡异;然后查看了服务器监控,发现有一台服务节点CPU达到了100%,于是开启问题排查之路。

    TP耗时监控

    TP耗时

    CPU监控

    CPU

    TOP

    首先查看系统资源占用信息,TOP看一下

    top

    发现正在运行的JAVA项目CPU占用率达到了790%左右了,那么问题一定出在这个程序中。

    找到CPU使用率较高的线程ID(TID):

    命令:ps p pid -L -o pcpu,pid,tid,time,tname,cmd

    ps p 142 -L -o pcpu,pid,tid,time,tname,cmd
    

    可以看到这个进程中有3个线程的CPU占用率很高,它们的TID分别为397,527,863

    将获取的线程号(十进制数)转换成十六进制

    printf "%x\n" 397

    结合进程号和线程号,利用jstack查到异常代码所在行

    jstack -l <pid> | grep <thread-hex-id> -A 10 命令显示出错的堆栈信息

    -A 10 参数用来指定显示行数,否则只会显示一行信息。

    如下图

    jstack

    可以看到在代码的第226行有问题。也就是说是这一句导致cpu占用过高。

    本地代码问题排查

    仔细看了代码后,才发现了一个弱智问题,此处的代码问题在于赋值导致部分请求会陷入死循环,开发时大意了。
    修复后打包上传,程序终于正常了!

    相关文章

      网友评论

          本文标题:排查Java程序CPU占用过高问题

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