【开发经验】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){

    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

叁滴水

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

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

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

打赏作者

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

抵扣说明:

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

余额充值