线上定位问题

文章转载自作者justry_deng,原文链接: https://blog.csdn.net/justry_deng/article/details/90447410 的部分内容,并做了部分修改。


线上高cpu占用率问题定位:

提示:在业务量不大的情况下,cpu占用率过高,死循环以外,常见的可能还有:内存泄漏,导致大量full GC......

排查开始:

第一步:使用top指令,定位CPU占用较高的进程。

第二步:使用top -H -p ${进程id}指令,查看指定进程下各个线程的cpu使用情况。

:PID虽然名为进程控制符,但其用途不限于特指进程id。如上图中PID列指的就是线程的id。

第三步:使用printf "%x" xxx指令,将1977转换为16进制。

第四步:使用jstack pid指令,查看当前的堆栈信息;并根据上一步得到的16进制的线程id,找到肇事线程。

提示:如果线程较多的话,我们可以使用grep指定来根据关键字定位行,如:jstack 1956 | grep -10 7b9:显示【|】前面的指令打印出的信息中的,含有关键字【7b9】的那一行以及其前后各10行的数据。

:jstack 1956 | grep 7b9:显示【|】前面的指令打印出的信息中的,含有关键字【7b9】的那一行数据。

第五步:分析肇事线程堆栈信息。

  • ①线程名。

  • ②线程优先级。

  • ③一个地址(该地址是什么地址,存疑)。

  • ④线程十六进制id。

  • ⑤线程状态。

  • ⑥线程当前所处方法。

  • ⑦该箭头表示线程的执行历程。

  • ……

:此时,我们已经定位到了问题代码的位置⑥,接下来查看程序相应位置的代码,解决问题即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值