linux下java进程cpu占用过高的定位思路

假如生产环境cpu占用过高,谈谈你的分析思路和定位?

步骤:
我们提前部署了一个死循环的javaDemo程序,跑在linux上。

1. 先用top命令找出占用cpu最高的进程号
可以发现进程号是5101的java进程:
在这里插入图片描述
2. ps -ef或者jps进一步定位
得知是怎样一个后台程序给我们惹事。可以发现是我们正在运行的java demo程序:

  • jps -l 列出所有进程:
    在这里插入图片描述
  • ps -ef|grep java|grep -v grep
    在这里插入图片描述

3 .定位到具体的线程或者代码!!!!!
使用如下命令:
ps -mp 5101 -o THREAD,tid,time
参数解释:

  • -m :显示所有线程
  • -p pid :进程使用的cpu时间
  • -o :该参数后使用户自定义格式
    在这里插入图片描述
    可发现,线程号5102的线程,cpu占用最高,达到35.6%,有问题。

4.将需要的线程id转换为16进制格式(小写)
将线程号 5102,转换为16进制数字 :13ee;

5.jstack 进程id | grep tid(16进制线程id,小写英文) -A60
jstack 5101 | grep 13ee -A60
参数说明

  • -A60 打印前60行

在这里插入图片描述
可以发现,是第10行代码有问题。
到此就找到了出问题的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值