美文网首页
如何调试线上cpu高占的问题

如何调试线上cpu高占的问题

作者: ludan110 | 来源:发表于2020-02-21 23:01 被阅读0次

    造错误代码如下:

    人造死循环,用来模拟cpu异常的情况


    image.png

    打包发布并启动

    打包发布到linux机器中,启动jar包。
    java -jar ***.jar --server.port=9093

    请求,造异常

    1. 正常请求无错误
      curl localhost:9093/test
    2. 请求会导致异常的代码
      curl localhost:9093/test/jvmtest
    3. 使用top命令,查看cpu占用情况
      image.png
      可以看到pid尾24933的进程cpu占用了100%,这就是我们造出来模拟的异常。
    4. 查看线程中耗新能的子线程
      top -Hp 24933
      image.png
      可以看到线程号为25013的线程占用99.9的cpu。
    5. 将线程号转换为25013
      方式一:通过你手头的计算机算出来16进制值
      image.png
      方式二:使用printf命令转换
      printf "%x" 25013,巧妙的用%x,占位符将10进制的值转换为了16进制
    6. 使用jstack查询出错误的代码位置
      jstack 24933 | grep 61b5 -A 30
      其中24933为进程号,61b5为上一步中算出来的16进制的线程号。

    命令查询的结果如下:

    image.png
    可以看到线程状态时RUNNABLE,且具体的代码位置为:TestController第93行。
    再回看下代码。确实如此,终于找出问题。
    image.png

    相关文章

      网友评论

          本文标题:如何调试线上cpu高占的问题

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