性能测试

进程的三态:阻塞、运行、就绪

一、测试结果

聚合报告参数详解

  • Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
  • #Samples:请求数——表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
  • Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间
  • Median:中位数,也就是 50% 用户的响应时间
  • 90% Line:90% 用户的响应时间
  • Min:最小响应时间
  • Max:最大响应时间
  • Error%:错误率——错误请求数/请求总数
  • Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
  • Received KB/sec(每秒接收的KB):每秒钟从服务器接收到的数据量。这个指标显示了网络流量的输入。
  • Sent KB/sec(每秒发送的KB):每秒钟发送到服务器的数据量。这个指标显示了网络流量的输出。

测试结果在聚合报告中对应的参数:

响应时间:90% 百分位 单位为毫秒

tps:吞吐量

吞吐率:接收+发送(KB/sec)

cpu(%)(us+sy):top命令中的us+sy

mem(%):top命令中Mem的used除以total

网络(M):iftop命令中的peak列的total值

total:总量

二、性能检测命令

使用--help查看命令
top
vmstat 2     其中:2表示采样间隔时间(单位为秒)
iostat -x 2  其中:-x表示显示扩展的统计信息,包括每个设备的详细 I/O 性能指标。2表示每 2 秒刷新一次统计信息。
iftop

dstat
iotop
sar

分析参数

1.top

博客:https://blog.csdn.net/weixin_45465395/article/details/115728520

image-20250711194739378

cpu个数:top命令下,按1,看%Cpu(s)

系统负载(load average)
表示单位时间内等待 CPU 处理的进程数(包括正在运行和等待运行的进程)。例如,4 核 CPU 负载为 11.2(4×2.8),说明平均有 11.2 个进程在竞争 4 个 CPU 核心,大量进程处于等待状态。

负载与 CPU 核心数的关系

  • 负载 ≈ CPU 核心数:CPU 资源刚好满足需求,系统流畅。
  • 负载 > CPU 核心数 1.5 倍:CPU 开始出现压力,部分进程需等待。
  • 负载 > CPU 核心数 2.8 倍:CPU 严重过载,系统性能会明显下降。

load average:平均负载,观察5分钟的平均负载情况,如果大于cpu个数的2倍说明CPU不够用

zombie:表示僵户进程,不为0则表
示有进程出现问题。对于僵尸进程,需要杀父进程;kill -9杀不掉

wa:表示IO等待所占用的CPU时间的百分比。

  • wa值越大,说明I/O等待越严重。
  • wa 的参考值为30%(有的说20%),如果wa 超过30%,说明IO 等待严重,这可能
是磁盘大量随机读写造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块
操作)。

si(Software Interrupt)

  • 含义:表示 CPU 用于处理软中断的时间占比

小于4%,大于4%说明软中断偏高

swap的used:使用的交换区总量;值比较大时,内存可能不足了

2.vmstat 2

博客:https://www.cnblogs.com/baichunyu/p/15362733.html

image-20250711201546528

procs

r:运行队列中进程的数量,这些进程都是可运行状态,都在等待CPU的分配

解释:当这个值超过了CPU数目,就会出现CPU瓶颈,如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高

b:被blocked(阻塞)的进程数,正在等待IO

memory

swpd:使用的虚拟内存的大小,单位是KB

解释:如果该值大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器

free:可用的物理内存大小,单位是KB

buff:物理内存用来缓存读写操作的buffer大小,单位是KB

cache:物理内存用来缓存进程地址空间的cache大小,单位是KB

swap
swap

si(Swap In)

  • 含义:表示从交换空间(swap)读入到物理内存RAM的速率。
  • 作用:当系统需要将数据从交换空间加载到物理内存时,si 的值会增加。这通常发生在某些进程需要访问之前被交换出去的内存页面时。

so(Swap Out)

  • 含义:表示从物理内存写入到交换空间的速率。

解释:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响。有些朋友看到空闲内存(free)很少时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响。

若swpd长期超过100M,且si或so的值长期不为0,说明内存不够用,需要增加系统内存

io

bi:表示从磁盘(块设备)读入到内存的数据的总量(也就是读磁盘)(每秒kb)。

bo:每秒从内存写入磁盘(块设备)数据的总量(也就是写磁盘)(每秒kb)。

==注:==如果bi+bo的值过大(参考值为1000),且cpu区域wa 值较大,则表示系统磁盘I/O
瓶颈,应该提高磁盘的读写性能,或者减少应用

程序不必要的磁盘读写。

system

in:每秒的设备中断数

cs:系统每秒进行上下文切换的次数

解释:cs表示每秒上下文切换的次数,例如,当我们调用系统函数,就要进行上下文切换;当进行线程的切换,也要进行上下文切换,这个值越小越好。例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程或线程数就是比较合适的值了。系统调用也是如此,每次调用系统函数,我们的代码就会进入到内核空间(内核态),导致上下文切换,这个过程很耗资源,所以要尽量避免频繁的系统调用。上下文切换次数过多表示你的CPU大部分时间浪费在上下文切换中,导致CPU干正经事的时间少了。

cpu

us:表示用户进程消耗的CPU时间的百分比。

  • us越高,说明用户进程消耗的cpu时间
越多
  • 如果长期大于50%,需要考虑优化程序或算法。

sy:表示系统内核进程消耗的cpu时间的百分比。

  • 如果该值比较大,说明内核消耗的
CPU资源较多,则可能存在较大的长下文切换以及磁盘I/O等待情况

一般来说us+sy大
于 80%说明可能存在CPU瓶颈。

3.iostat -x 2

image-20250711202543557

%util:一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O
队列是非空的。

  • 如果%util接近100%,说明产生的I/O 请求太多,I/O系统已经满负荷,该磁盘
可能存在瓶颈。

4.iftop

image-20250711202819090

peak:流量峰会

  • peak列的total值远远小于200M,带宽占用不高
top命令:
load average:5分钟平均负载为4.66,大于cpu个数的2倍,说明CPU不够用
zombie:僵尸进程长时间为0,不需要处理
wa:长期接近0,远远小于20%,说明磁盘读写(IO)没有问题
si:长期接近于0,未达到4%,软中断不高
Swap的used:值比较大,内存可能有问题

命令
r:长期大于系统CPU个数的2倍,说明CPU不足
swpd长期超过100M,且si的值长期不为0,说明内存不够用,需要增加系统内存
bi+bo的值 长期小于1000,说明磁盘读写没问题
in、cs远远小于10000,说明上下文切换正常
us+sy大于80%说明可能存在CPU瓶颈

iostate命令
%util:长期接近于0,说明磁盘IO没问题

iftop命令
peak列的total值远远小于200M,带宽占用不高

宽带:用户(业务)维度来描述网络速率的方式。例如:20M宽带、100M宽带、1000M宽带
o

速率单位:b(bit)/s

带宽:数据在网络中传输的速率,在技术中都是通过带宽来描述速率

速率单位:B(Byte)/s

1B=8bit

实际情况:1000M宽带一一对应着的带宽速率为1000/8=125M

5.使用Jmeter进行性能测试

  • 在linux上解压ServerAgent-2.2.3.zip

  • 执行可执行文件startAgent.sh

  • 在Jmeter中添加监听器–>jp@gc - PerfMon Metrics Collector

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐