【面试】性能测试_如何找到CPU飙升的原因

一、通过进程和线程

        首先,需要知道哪个进程占用CPU比较高;其次,需要知道占用CPU高的那个进程中的哪些线程占用CPU比较高;然后,需要知道这些线程的stack trace。

二、通过堆栈和应用日志

        找出了CPU占用高的线程号和其stack trace并再结合应用日志基本上就可以找到问题根源。接下来,将介绍相应的工具来找到这些问题的答案。

四、通过工具

4.1、top和pgrep

        通过top和pgrep来查看系统中Java进程的CPU占用情况。命令如下:

top -p `pgrep -d , java`

其中pgrep是显示系统中java应用的进程号,top -p是只显示这些进程的信息。记录下CPU占用率最高的那个进程号。

4.2、通过top来查看进程中CPU占用最高的那些线程,命令为:

top -Hp X

这里,假定X为占用CPU高的进程号。-H是显示该进程中线程的CPU占用情况。同样,记录下CPU占用率高的那些线程号。

4.3、然后,通过jstack导出Java应用中线程的stack trace,命令如下

jstack X

这里是最关键的一步,需要把第2步中的线程号和jstack输出结果中的线程号关联起来。因为top中显示的线程号是10进制,jstack的输出结果中的线程号是16进制,所以只需要把top中看到线程号转换成16进制,然后到jstack的输出结果中即可找到对应线程的stacktrace了。

        小结一下,我们通过top和jstack来找到CPU占用高的线程的stack trace,其中最关键的是上述第3步中如何将top中观测到的线程号关联到jstack的输出的stack trace。

五、垃圾回收线程CPU 高的原因分析:

        系统内存溢出,可以查看gc日志,是否是一直在进行FULL GC,如果是,可以尝试调整JVM的参数。或者使用 jmap -dump:format=b,file=dumpFileName pid,把内存转存下来,借助工具找到内存溢出的位置。

六、业务处理线程CPU高的原因分析:

        查看交易是否有死循环逻辑,或者其他不合理的逻辑

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值