新手区 性能测试问题定位常用方法之 cpu 篇

大话性能 · September 09, 2018 · Last by 大话性能 replied at September 11, 2018 · 1678 hits

随着工作的积累,在性能测试过程中,主要遇到问题主要有以下3类:
1、cpu问题;
2、sql问题;
3、参数问题

今天就和大家讲讲如何进行cpu问题定位的常用方法和步骤。

更多工作中的测试技能干货,大家可以关注微信公众号<大话性能>,会持续不断分享。

http://dwz.cn/NNW9Wm5G

现象描述

1、多核CPU使用率不均衡,有些CPU使用率较高,有些CPU基本没有使用。大多数情况下,服务不会均衡的分配到每个服务器。
2、cpu使用率很高。

排查步骤

 步骤1 top 查看系统资源占用情况
哪些CPU核使用较高 "qatest@app-50:~$ top
 
Tasks: 144total,   2running, 142sleeping,   0stopped,   0zombie
Cpu0  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  70%us,  1.0%sy,  0.0%ni, 28%id,  1.3%wa,  2.6%hi,  0.0%si,  0.0%st
Cpu2  :  0.3%us,  0.0%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
 
然后按1键,查看每个CPU核负载。从以上数据不难看出,CPU1偏高,其它CPU比较空闲。那CPU1在做什么呢?"
查看是什么进程负载比较高 "top查看什么进程CPU使用较高:
 
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+ COMMAND                                                                          
24734java 20   0  929m 598m 5648S   807.5  81:34.63java
 
可以初步判断是java进程负载比较高。那这个java进程究竟在忙什么呢?"
步骤2 查找耗费资源线程
查看每个CPU核上有哪些线程 "ps -eLo pid,tid,pcpu,psr,comm | grep XXX
pid 进程号
tid 线程号
pcpu cpu利用率
psr 所在cpu核号
comm 进程名
 
分析负载较高的核上有哪些线程,那这些线程在做什么?"
或者top -H查找线程 "或者使用top -H查找cpu使用率较高的线程。
 
PID   USER   PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5783  qatest 200127m 27m 2444S 120.10:00.44/home/qatest/tobie2
24117qatest 200129m 32m 2532S 100.10:05.06/home/qatest/tobie2
632   qatest 200127m 29m 2556S 100.10:01.96/home/qatest/tobie2
3354  qatest 200118m 22m 2456S 100.10:00.86/home/qatest/tobie2
"
步骤3 jstack分析线程在做什么
分析热点线程堆栈 "jstack -l  dump线程堆栈
将grep出的线程号,转换成十六进制,在线程堆栈中查找相应十六进制的线程号和堆栈信息。
分析线程堆栈信息,查看CPU可能消耗的点。
根据经验,可能的原因有:死循环、死锁、过多使用锁等。"

以上就是cpu问题最基础也是最原始的定位方法,另外jvm的垃圾回收也有可能导致cpu的问题,也需要留意和关注。
如果公司有钱或不差钱,会有一些商用的工具,譬如apm、Dynatrace等性能应用管理工具。

大家可持续关注大话性能公众号,不断学习测试实战技能和高薪岗位内推。

共收到 2 条回复 时间 点赞

写的挺好的,命令如果能结合实际的截图就好了

hy 回复

下次改进,哈哈

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up