随着工作的积累,在性能测试过程中,主要遇到问题主要有以下 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 等性能应用管理工具。
大家可持续关注大话性能公众号,不断学习测试实战技能和高薪岗位内推。