【开发经验】java服务生产环境CPU使用过高解决思路


        java服务生产环境CPU突然升高,日志查询无果时,可以通过使用jvm的调试工具定位问题。

思路

定位java服务进程——>定位java线程——>定位代码块

1、定位java服务进程

一个服务器可能有多个java服务。通过top命令可查看是哪个服务cpu使用率较高。记住CPU使用率较高的PID号。

image-20211102145534739

2、定位线程id

每个java服务中有很多线程在执行,通过ps H -eo pid,tid,%cpu --sort=%cpu |grep [PID] 可以定位到哪个线程CPU使用率较高

[root@]# ps H -eo pid,tid,%cpu --sort=%cpu |grep 20443
20443 22263  0.0
20443 20469  0.3
20443 20451  0.4
20443 20466  0.6
20443 20468  0.6
20443 20467  50.0

如上图,看到20467线程CPU使用率较高,可查看是哪块代码使用较高。

3、定位代码块

通过jstack [PID]可显示出线程的执行状态如下图,但是乱七八糟,通过20467转换为16进制进行搜索。

image-20211102151016912

搜索得到对应的线程信息,可直观的看到代码异常信息。

可通过springboot中一个while循环进行测试。

@GetMapping ("/while")
public void while1(){
    
    
   log.info ("while!~~~~~~~~~");
    while (true){
    
    

    }
}

猜你喜欢

转载自blog.csdn.net/qq_30285985/article/details/121101267