08-09 性能测试--CPU分析

Linux 监控工具

top:展示所有进程信息

vmstat:展示系统活动,硬件和系统信息

  • vmstat pid 10

ps:

  • ps aux | sort -k3nr | head -n 10:展示 CPU / 内存排名

free:展示内存占用

  • free -g

iostat:展示 IO 信息

  • iostat -x -k -d

pidstat:展示进程的 CPU 使用情况

  • pidstat -u -p ALL
[root@ZT-TEST ~]# pidstat -p 8938 -w 1 10
Linux 3.10.0-957.el7.x86_64 (ZT-TEST)   2021年10月03日  _x86_64_        (4 CPU)

10时13分44秒   UID       PID   cswch/s nvcswch/s  Command
10时13分45秒    42      8938      1.00      1.00  gsd-color
10时13分46秒    42      8938      1.00      0.00  gsd-color
10时13分47秒    42      8938      1.00      0.00  gsd-color

cswch/s:主动切换;值过高,说明内存 IO 资源不足

nvcswch/s:被动切换;值过高,说明时间片不足

mpstat:展示 CPU 所有内核的使用情况

  • mpstat -P ALL 1

netstat:进程连接数统计

  • netstat -anp | grep pid | wc -l

jstat:每秒刷新一次 GC 情况

  • jstat -gcutil pid 1000

dstat:中断与上下文切换统计

  • dstat -y

strace:拦截系统调用

  • strace -tt -f -p pid

CPU 基本构成

命令:lscpu

[root@ZT-TEST ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4  # 逻辑 CPU 个数
On-line CPU(s) list:   0-3
Thread(s) per core:    1  # 线程,每个 核 中有1个线程
Core(s) per socket:    1  # 核,指每个 卡槽 下有1个核
座:                 4  # socket-卡槽,指每个 CPU 下有4个卡槽
NUMA 节点:         1
厂商 ID:           GenuineIntel
CPU 系列:          6
型号:              45
型号名称:        Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz
步进:              7
CPU MHz:             2600.000
BogoMIPS:            5200.00
超管理器厂商:  VMware
虚拟化类型:     完全
L1d 缓存:          32K
L1i 缓存:          32K
L2 缓存:           256K
L3 缓存:           20480K
NUMA 节点0 CPU:    0-3
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx hypervisor lahf_lm ssbd ibrs ibpb stibp tsc_adjust arat spec_ctrl intel_stibp flush_l1d arch_capabilities

负载与利用率

CPU负载

命令:top

[root@ZT-TEST ~]# top
top - 18:05:32 up 214 days,  3:19,  1 user,  load average: 0.01, 0.02, 0.05
Tasks: 263 total,   1 running, 262 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.8 us,  0.2 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  8174056 total,   331764 free,  3016584 used,  4825708 buff/cache
KiB Swap:  4194300 total,  4191968 free,     2332 used.  4297980 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 8938 gdm       20   0  777872  76052   9500 S   2.0  0.9   2493:51 gsd-color
12511 root      20   0 5735740 148696  16064 S   0.7  1.8 358:06.15 java
 4785 root      20   0  164232   2536   1644 R   0.3  0.0   0:00.06 top
 5820 root      20   0  320216   6880   5388 S   0.3  0.1 282:22.54 vmtoolsd

平均负载:

load average: 0.01, 0.02, 0.05

平均负载是指单位时间内,系统处于可运行状态不可中断状态的平均进程数,也就是平均活跃进程数

  • 可运行状态的进程:正在使用 CPU 或者正在等待 CPU 的进程,也就是处于 R 状态(Running 或 Runnable)的进程
  • 不可中断状态的进程:正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程

CPU 利用率

当平均负载等于 CPU(s): 4 (逻辑 CPU 个数) ,说明每个 CPU 都得到了充分利用

通过 top 查看整体每个进程的 CPU 利用率

通过 mpstat -P ALL 1 查看逻辑 CPU 利用率

[root@ZT-TEST ~]# mpstat -P ALL 1
Linux 3.10.0-957.el7.x86_64 (ZT-TEST)   2021年10月02日  _x86_64_        (4 CPU)

18时16分57秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
18时16分58秒  all    0.75    0.00    0.25    0.00    0.00    0.00    0.00    0.00    0.00   99.00
18时16分58秒    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
18时16分58秒    1    1.01    0.00    1.01    0.00    0.00    0.00    0.00    0.00    0.00   97.98
18时16分58秒    2    2.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   98.00
18时16分58秒    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

# 0--3 分别代表4个 CPU

mpstat -P ALL 1 的结果分析:

  • %usr:用户空间;导致空间不足原因:代码、项目运行
  • %sys:系统空间;导致空间不足原因:内存不足、CPU不足、IO故障、网络故障……
  • %irq:上下文切换
  • %soft:软中断
  • %steal:硬中断

CPU 利用率与平均负载的关系:

  • CPU 利用率=100%,平均负载=CPU 个数:理想状态,CPU 得到充分利用,队列中没有排队等待的线程
  • CPU 利用率=100%,平均负载>CPU 个数:CPU 满载,超负荷运行,队列中有排队等待的线程
  • CPU 利用率<100%,平均负载<CPU 个数:CPU 没有被完全利用

命令:vmstat 1 10

[root@ZT-TEST ~]# vmstat 1 10
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0   3368 2922680   4204 4345184    0    0     0     1    0    0  0  0 100  0  0
 0  0   3368 2922688   4204 4345216    0    0     0     8  143  229  1  0 100  0  0
 0  0   3368 2922688   4204 4345216    0    0     0     0  173  281  1  0 99  0  0
 
 # 当 r + b 远远大于 CPU 线程数,说明系统处于过载状态

进程优先级

命令:top

[root@ZT-TEST ~]# top
top - 10:13:15 up 214 days, 19:26,  1 user,  load average: 0.06, 0.05, 0.05
Tasks: 262 total,   1 running, 261 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.7 us,  0.2 sy,  0.0 ni, 99.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  8174056 total,   338476 free,  3015636 used,  4819944 buff/cache
KiB Swap:  4194300 total,  4191968 free,     2332 used.  4282596 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 8938 gdm       20   0  778004  76244   9500 S   1.7  0.9   2510:43 gsd-color
26591 kingkong  20   0 5722784   1.2g  24080 S   0.7 15.6 765:28.80 java
 5820 root      20   0  320216   6880   5388 S   0.3  0.1 283:16.87 vmtoolsd
 5860 avahi     20   0   62364   2464   1864 S   0.3  0.0 458:16.62 avahi-daemon
12511 root      20   0 5735740 148696  16064 S   0.3  1.8 363:33.44 java
31958 root      20   0  164232   2536   1644 R   0.3  0.0   0:00.04 top

PR:进程的实时优先级;范围是从 0 到 99。PR 的值越高,进程优先级就越高

NI:范围从-20 到+19,正值表示低优先级,负值表示高优先级。0 表示不调整该进程的优先级

  • 两者关系:NI 越低,进程时间片越多,PR 值越低,进程的优先级就越高
  • 进程优先级调整方式:top 命令下按 R 键,先输入进程号,再输入优先级数值(-10~+19)

模拟负载

stress

参考链接:
https://blog.csdn.net/weixin_...

安装:

yum install -y epel-release.noarch && yum -y update
yum install -y stress stress-ng

常用命令(使用注意事项:不要生成过多进程,会损伤 CPU):

  • stress-ng -c 2 -t 30 -c:指定进程数 -t 指定时间
  • stress-ng -c 2 --cpu-method pi:产生 2 个进程做圆周率算法压力
  • stress-ng -c 16 --cpu-method all:生成 16 个进程使用多种不同的算法竞争 CPU
  • taskset -c 16 stress-ng --timeout 30 --cpu 1:生成 16 个进程对索引为 0 的逻辑 CPU 施加压力, 持续 30 秒
  • stress-ng -c 16 --timeout 300:模拟 16 个进程争夺 CPU 持续 300 秒
  • stress-ng -i 1 --timeout 600:模拟 IO 进程

机智的测试生活
双非大龄青年,转行测试工程师。 分享测试工程师的职业经验, 提供付费转行咨询

公号|机智的测试生活

83 声望
477 粉丝
0 条评论
推荐阅读
转正实录|陪你走一段路
转行的第一喜事,当然是收到Offer啦~拿到Offer的那一天,我松了一口气,算是实现了一个小目标。但我又意识到,接下来,游戏要升级了,即将要面临试用期的考验。

机智的测试生活阅读 491

封面图
一文教会你mock(Mockito和PowerMock双剑合璧)
Mock有模仿、伪造的含义。Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。mock工具使用范畴:

京东云开发者2阅读 393评论 1

封面图
源码学习之 Spring 容器创建原理
众所周知,Spring可以帮我们管理我们需要的bean。在我们需要用到这些bean的时候,可以很方便的获取到它,然后进行一系列的操作。比如,我们定义一个bean MyTestBean。

京东云开发者3阅读 466

封面图
测试自动化中遵循的最佳实践
现在的企业从以往一年、一个月、一周交付,逐渐转变为开始关注两到三天甚至一天内交付。软件自动化测试的出现及其与手动测试的结合使得这种时长的交付成为可能。

陈琦3阅读 522评论 1

一个漏测Bug能让你想到多少?
漏测Bug是指产品逻辑缺陷在测试过程中没有被发现(尤其是测试环境可以重现的缺陷),上线版本发布后或者在用户使用体验后发现并反馈回来的缺陷。可能造成线上故障或者资损,在对产品测试过程中,自己也难免出现一...

得物技术阅读 989评论 1

重写 Nacos 服务发现:多个服务器如何跨命名空间,访问公共服务?
这就意味着只需部署一个应用,就能满足所有测试环境的需求;也意味着所有测试环境都需要调用该公共应用,而不同测试环境的应用注册在不同的 Nacos 命名空间。

LigaAI阅读 640

封面图
结合 API & DaaS,让使用数据更方便
Eotalk 是由 Eolink CEO 刘昊臻发起的泛技术聊天活动,每期都会邀请一些技术圈内的大牛聊聊天,聊些关于技术、创业工作、投融资等热点话题。

Eolink阅读 608

公号|机智的测试生活

83 声望
477 粉丝
宣传栏