CPU占用高及问题排查

CPU异常往往是业务逻辑问题(死循环)、频繁gc以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用jstack来分析对应的堆栈情况,本文通过死循环方式重现CPU过高场景,并实例讲解CPU过高问题排查的方式。

1.环境

  • Centos7 1核2GB
  • Java8

2.模拟cpu占用高

创建 cpu-over-test 项目,添加了一个MyMainClazz类。里面有一个可是要 java -jar 执行的Main方法
模拟代码如下

public class MyMainClazz {

    public static void main(String[] args) {
        System.out.println("run start ...");
        while (true) {

        }
    }
}

cpu-over-test-1.0.jar
下载地址:https://pan.baidu.com/s/1-VTQ02qrb1l010MiFshHzw
密码:iqjl

3.启动模拟程序

  • cpu-over-test.jar上传到服务器
  • 启动命令
nohup java -jar cpu-over-test-1.0.jar  &


启动成功示例:
在这里插入图片描述
启动成功后,几秒功夫就看到cpu 百分之百了

4.问题排查四步骤

4.1.查看占用CPU高的进程

top

如下图:整体CPU高达96.3%
可看出PID为 14855 的java进程占用cpu最高,达到了92.3%
在这里插入图片描述

4.2.查看进程中最耗CPU的子线程

使用命令:top -p 进程pid -H

top -p 14855 -H

如下图:可看出PID为14856的线程占用cpu最高,达到了92.3%
在这里插入图片描述

4.3最耗CPU的线程id转换为16进制

使用命令:printf “%x \n” 线程PID

 printf "%x \n" 14856

在这里插入图片描述

4.4查看具体出现问题的代码位置

使用命令:jstack 进程pid | grep 线程ID转换为16进制值 -C20

jstack 14855 | grep 3a08 -C20

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值