椎牛飨士网

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

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

一、面试通过进程和线程

        首先,测试需要知道哪个进程占用CPU比较高;其次,何找需要知道占用CPU高的到C的原那个进程中的哪些线程占用CPU比较高;然后,需要知道这些线程的飙升stack trace。

二、面试通过堆栈和应用日志

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

四、飙升通过工具

4.1、面试top和pgrep

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

top -p `pgrep -d ,何找 java`

其中pgrep是显示系统中java应用的进程号,top -p是到C的原只显示这些进程的信息。记录下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高的原因分析:

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

未经允许不得转载:椎牛飨士网 » 【面试】性能测试_如何找到CPU飙升的原因