定位CPU占用过高的方法

前言

最近在做接口压力测试的时候,对某接口进行并发,当并发达到100的时候,CPU占用达到75%以上,使用top和vmstat命令查看Average load达到20以上。但是其它指标,例如内存、网络、磁盘IO均在正常范围内,QPS、ART等指标性能非常好。

解决思路

  • 对接口持续进行并发,使用top命令确认PID


    定位CPU占用过高的方法_第1张图片
    top.png
  • 查看24871的线程数为256个,有两种方法:
  1. cat /proc/24871/status

定位CPU占用过高的方法_第2张图片
image.png
  1. ps hH p 24871 | wc -l

  • 查看线程的资源使用,每个线程资源占用虽然都比较小,但是线程数量较多,造成总的CPU占用较高

top -H -p 24871

定位CPU占用过高的方法_第3张图片
image.png
  • 使用jstack获取jvm DUMP文件,查看线程运行状态。

jstack -l 24871 > temp

在DUMP文件中查找线程时,需要先进行进制转换。在上一步中获取资源使用最高的线程ID:5611,然后将5611转换为16进制:15eb(转换工具:http://tool.oschina.net/hexconvert

  • 最后在DUMP文件中,查找15eb,获取当前线程的状态以及正在执行的类和方法。在测试过程中,可以不定时的多生成几个DUMP文件进行观察比较。


    定位CPU占用过高的方法_第4张图片
    image.png

你可能感兴趣的:(定位CPU占用过高的方法)