线上cpu 100%排查过程

线上cpu 100%排查过程

目录

线上cpu 100%排查过程

一、模拟死循环

 二、排查

1. 使用top命令,查看进程情况。

2. 使用 top -Hp pid 查看某进程的线程情况

3. 使用jvm指令 jstack -l pid 查看虚拟机当前时刻的堆栈快照。

四.排查代码


一、模拟死循环

首先模拟一个死循环,然后调用该接口。 

@RestController
public class AController {

    @GetMapping("/add")
    public void add(){
        int i = 0;
        while (true){
            i++;
        }
    }
}

发现cpu占用率一直保持在100%左右。

 二、排查

1. 使用top命令,查看进程情况-》定位高占用cpu进程。

 在linux使用 top 命令经常用来监控Linux的系统状况,比如每个进程cpu、内存的使用情况。可以看到java命令的那个pid为50839的进程cpu利用率最高达到了90%左右,并且一直长时间高占用cpu。

2. 使用 top -Hp pid 查看某进程的线程情况-》定位高占用cpu线程

可以发现 pid 为50601的线程占用cpu资源。

将 50601转化为16进制为 c991。

3. 使用jvm指令 jstack -l pid 查看虚拟机当前时刻的堆栈快照-》定位代码。

会打印除当前时刻的堆栈快照如下所示。贴了一部分。

此时我们应该寻找 nid=0xc991的线程,这个nid就是我们第二步中找出的占cup最多的线程pid的16进制。

可以看出AController类中的add方法一直处于运行状态,行号为20行。

四.排查代码

20行代码出现死循环,导致cpu高占用率。解决代码问题,问题解决。 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值