linux上java程序cpu占用过高查找问题代码定位

前提:需要模拟一个故障来定位这个故障究竟发生了什么问题。
现在模拟一个高CPU占用率故障,并且将其运行在linux上。

public class mytest1 {
    public static void main(String[] args) {
        while (true){
            System.out.println(Math.random()*10000);
        }
    }
}

两个命令 javac(编译文件将其转化为.class文件) java(运行.class文件)

在这里插入图片描述
在这里插入图片描述
自此模拟故障成功,下一步是进行故障排查。

故障排查

1.查看cpu运行状况 使用top命令
发现除系统进程外,还有进程cpu资源消耗率过高,且为java程序。
在这里插入图片描述
2.根据提供的进程去定位该进程下具体工作的线程使用命令 ps -mp 进程号 -o THREAD,tid,time(-m显示所有线程 -p pid进程使用的cpu时间 -o该参数后是用户自定义格式)

根据36298线程找到如下数据:
在这里插入图片描述
发现线程36299承担进程大部分cpu占用率。
3.进一步查看36299线程下究竟运行的是什么东西。使用命令:jstack 进程号 | grep 线程号(该进程下的工作线程号,需要16进制且小写英文字母) -A60(打印前60行)
16进制转换可以直接使用计算器:
在这里插入图片描述
该命令则为:jstack 36298 | grep 8dcb -A60
发现如下数据:
在这里插入图片描述
观察到红色框框正是我们之前设置的故障文件(mytest1.java),可是这个6是什么意思呢?
打开文件看看在这里插入图片描述
发现正好是引发cpu占用率过高的代码行数!!
总结:当我们需要查找cpu过高原因的时候,可以通过观察进程—>线程—>代码行数的情况,定位到究竟是哪些代码带来cpu占用过高的问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值