Java应用程序高CPU故障诊断(troubleshooting)思路

当Java应用程序出现高CPU使用率问题时,可以通过找到占用CPU的进程和线程,进一步分析其执行状态来定位问题。在Linux环境下,使用top和jstack工具进行故障诊断,通过多次收集线程堆栈信息,可以确定导致CPU过高的代码段。此方法同样适用于其他环境和程序,只需相应工具进行替换。
摘要由CSDN通过智能技术生成

系统运行出现高CPU报警,一般可以通过top或者任务管理器找到哪些进程在使用CPU,但这个粒度不能让我们知道得更多,我们需要找到程序的哪部分在占用CPU并且在占用CPU做什么,这样才有利于我们以后调优,下面介绍一种可行的思路:

  1. 找到占用CPU高的进程p
  2. 找到进程p中占用CPU高的线程t
  3. 找到线程t在做什么

本文以Linux下Java应用程序为例,其他环境或程序可参照该思路,只要思路清晰就好办了

  • 打开top,在top中按shift+p按照CPU使用量倒序显示进程,找到占用CPU较高的进程号pid,然后退出top
  • top -H -p pid 显示该进程中线程的运行情况,pid可以指定多个,在top中按shift+p按照CPU占用倒序显示线程,找到占用CPU高的线程tid,比如是27890,通过printf打印出该tid的是十六进制号
 $ printf "%x\n" 27890
 6cf2
  • 通过threaddump工具以十六进制号查看该线程当前的堆栈信息,Java中threaddump工具为jstack
$ jstack -l <pid> | grep -i 0x6cf2 -A 15
  • 多次重复执行1-3步骤,确定线程所做的耗时操作,注意步骤1-3之间延时越短越准确,最好在多个shell窗口下执行

通过上面的操作我们就可以确定哪段代码在大量占用CPU资源了,得到的结果如下


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值