• 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来打印线程状态是在合适不过的了,希望能够活学活用,加油。

  • 相关阅读:
    搭建个人Spring-Initializr服务器
    “不蒜子”统计总访问人数脚本
    基于Hazelcast及Kafka实现的分布式锁与集群负载均衡
    虚拟机部署hadoop集群
    程序员、黑客及开发者之间的区别
    今日校园自动登录教程
    逆向DES算法
    来自穷逼对HttpCanary的蹂躏
    今日校园提交签到和查寝-Java实现
    JS 判断数据类型方法
  • 原文地址:https://www.cnblogs.com/cecWork/p/13062227.html
Copyright © 2020-2023  润新知