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

Posted 叁滴水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发经验java服务生产环境CPU使用过高解决思路相关的知识,希望对你有一定的参考价值。


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

思路

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

1、定位java服务进程

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

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进制进行搜索。

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

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

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

    }
}

以上是关于开发经验java服务生产环境CPU使用过高解决思路的主要内容,如果未能解决你的问题,请参考以下文章

生产环境CPU过高问题定位

[转]生产环境中程序占用cpu过高的程序的排查办法

RabbitMQ导致的java服务占用cpu过高从而导致系统负载过高

服务器CPU使用率过高排查与解决思路

Mysql占用CPU过高如何优化,如何解决

压力测试过程中MySQL服务CPU占用率过高的问题排查思路