Java生产环境调优—模拟一次CPU飙升问题

  在开发的过程中,程序员打交道最多的就是内存和CPU,在上一篇博客中,我们分享了一次内存溢出的排查定位,今天这里我们再分享一下关于CPU的飙升问题定位。在学习了一段时间的生产环境调优的课程之后,对jdk自带的一些命令有了了解。当我们遇到内存相关的问题,可以通过jmp+mat来分析定位。那么当我们遇到CPU相关的问题的时候,可以通过jstack来定位分析。

  1、开发环境: SpringBoot 2.1.3.RELEASE,添加web依赖。

  2、代码演示:新建一个Controller层,定义一个变量,然后写一个while死循环,不断递增变量值。

 

 

  3、启动程序,通过url访问:http://127.0.0.1:9090/busyCPU,然后打开terminal,输入top命令查看,见截图:

 

 通过截图,我们可以看到pid为10699的进程CPU占用情况为96.8%,这个应用就不正常了。

  4、我们通过jstack pid >cpu.txt,将结果输出到cpu.txt文件中,用于分析。

  5、将top命令查出来的pid为10进制的,jstack命令输出的是16进制的nid,所以需要做个进制转换,然后查询cpu.txt中对应的进程号,截图如下:

 

截图中,可以看到导致CPU飙升的进程行号。对应的是代码中的行数。至此,问题已经定位到了,大功告成。总结:遇见死锁的时候,用jstack来打印线程状态是在合适不过的了,希望能够活学活用,加油。

posted @ 2020-06-07 21:05  虫虫低语  阅读(525)  评论(0编辑  收藏  举报