前言
最近在做接口压力测试的时候,对某接口进行并发,当并发达到100的时候,CPU占用达到75%以上,使用top和vmstat命令查看Average load达到20以上。但是其它指标,例如内存、网络、磁盘IO均在正常范围内,QPS、ART等指标性能非常好。
解决思路
-
对接口持续进行并发,使用top命令确认PID
top.png - 查看24871的线程数为256个,有两种方法:
-
cat /proc/24871/status
-
ps hH p 24871 | wc -l
- 查看线程的资源使用,每个线程资源占用虽然都比较小,但是线程数量较多,造成总的CPU占用较高
image.pngtop -H -p 24871
- 使用jstack获取jvm DUMP文件,查看线程运行状态。
jstack -l 24871 > temp
在DUMP文件中查找线程时,需要先进行进制转换。在上一步中获取资源使用最高的线程ID:5611,然后将5611转换为16进制:15eb(转换工具:http://tool.oschina.net/hexconvert
)
-
最后在DUMP文件中,查找15eb,获取当前线程的状态以及正在执行的类和方法。在测试过程中,可以不定时的多生成几个DUMP文件进行观察比较。
image.png
网友评论