2、性能测试基础:性能测试的定义与目标、关键性能指标、测试环境搭建

各位同学,咱们今天聊聊性能测试的基础。说实话,很多刚入行的朋友一上来就盯着延迟和吞吐量看,但往往忽略了最根本的问题——你到底在测什么?为什么要测?

我见过不少团队,花了大把时间搭建环境,跑出一堆漂亮数据,结果发现测试场景跟线上完全对不上。嗯,这就是典型的「为了测试而测试」。咱们今天就把这些基础概念掰扯清楚。

2.1 性能测试到底在测什么?

性能测试,说白了就是回答三个问题:

  • 它能跑多快?——延迟
  • 它能扛多少?——吞吐量
  • 它稳不稳?——抖动

我个人习惯把性能测试比作「给系统做体检」。你想想看,一个人去体检,医生会测心率、血压、血氧——这些都是指标。性能测试也一样,我们需要一套标准化的指标来衡量系统的健康程度。

核心定义:性能测试是通过模拟真实负载,测量系统在特定条件下的响应能力、处理能力和稳定性,从而验证系统是否满足设计目标的过程。

我在项目中遇到过最典型的案例:某撮合引擎在实验室环境下延迟只有5微秒,但一上线就飙到50微秒。为什么?因为测试环境忽略了网络抖动和内存竞争。所以,测试的定义必须包含「真实场景」这个前提。

2.2 三大关键性能指标

咱们一个一个说。这三个指标就像三根柱子,缺一不可。

2.2.1 吞吐量(Throughput)

吞吐量指的是单位时间内系统能处理的事务数。对于撮合引擎,通常用「每秒撮合订单数」来衡量。

我曾经犯过一个错误:只关注峰值吞吐量,忽略了持续吞吐量。结果线上流量一上来,系统前10秒跑得飞快,后面直接崩了。为什么?因为缓存被击穿了。

指标 定义 常用单位 我的经验值
峰值吞吐量 短时间内能承受的最大值 TPS(每秒事务数) 通常比持续值高30%-50%
持续吞吐量 长时间稳定运行的值 TPS 这才是真正的能力上限
饱和吞吐量 系统开始出现性能拐点的值 TPS 超过这个值,延迟会急剧上升

小技巧:测试吞吐量时,我习惯先跑一个「预热期」,让JIT编译和缓存都稳定下来,再开始记录数据。否则前几秒的数据会误导你。

2.2.2 延迟(Latency)

延迟就是「从请求发出到收到响应的时间」。注意,这里有个坑——很多人只看平均延迟,但平均延迟会掩盖真相。

举个例子:假设有100笔订单,99笔延迟是1微秒,1笔延迟是100微秒。平均延迟只有1.99微秒,看起来很美。但实际体验呢?那1笔订单的用户会骂娘。

所以我建议关注这几个分位值:

  • P50(中位数):一半请求比这个快,一半比这个慢
  • P99:99%的请求比这个快——这是用户体验的关键
  • P999:千分之一的最差情况——排查问题时看这个

避坑指南:我曾经被P50数据骗过。一个撮合引擎P50只有2微秒,但P99高达200微秒。后来发现是GC停顿导致的。所以,只看平均延迟等于没看。

2.2.3 抖动(Jitter)

抖动是延迟的「方差」。说白了,就是延迟稳不稳定。

你想想看,一个系统如果延迟忽高忽低,就像开车时一脚油门一脚刹车,乘客肯定晕车。撮合引擎也一样,交易员最怕的就是「这次1微秒,下次100微秒」——这会导致策略失效。

我通常用这个公式来量化抖动:

Jitter = P99延迟 - P50延迟

如果这个差值超过P50的3倍,说明系统存在严重的抖动问题。常见原因包括:GC暂停、锁竞争、网络重传。

2.3 测试环境搭建——别让环境坑了你

环境搭建这块,我踩过的坑比走过的路还多。直接上干货。

2.3.1 硬件选型

撮合引擎对硬件有特殊要求:

  • CPU:高频优先,核心数其次。我习惯用4.0GHz以上的型号
  • 内存:低延迟内存,CL值越低越好
  • 网卡:必须支持RSS(接收端缩放)和中断亲和性
  • 存储:NVMe SSD,随机读写IOPS要够

2.3.2 软件配置

操作系统层面,有几个关键点:

# 关闭CPU频率缩放
echo 'performance' | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

# 关闭超线程(某些场景下)
echo off | sudo tee /sys/devices/system/cpu/smt/control

# 设置中断亲和性
# 将网卡中断绑定到特定CPU核心

我的习惯:测试前先跑一个「空载基线」,看看系统在没有业务负载时的延迟是多少。如果空载都有10微秒的延迟,那硬件或OS配置肯定有问题。

2.3.3 网络拓扑

撮合引擎通常采用「客户端-撮合节点-行情节点」的架构。测试时要注意:

  • 客户端和撮合节点之间不要有交换机跳数过多
  • 使用专用VLAN,避免广播风暴
  • 网卡开启巨型帧(MTU 9000)减少包数量

2.4 知识体系总览

下面这张图是我自己总结的,把性能测试的核心逻辑串起来了:

性能测试 吞吐量 延迟 抖动 峰值/持续/饱和 P50 / P99 / P999 P99 - P50 测试环境:硬件选型 + 软件配置 + 网络拓扑

这张图想表达的核心思想是:吞吐量、延迟、抖动三者相互关联,但测试环境是它们共同的基石。环境没搭好,后面所有数据都是废的。

2.5 一个实战案例

最后分享一个我自己的经历。有一次测试撮合引擎,发现P99延迟总是比P50高出一个数量级。排查了三天,最后发现是网卡中断没有做亲和性绑定,导致中断随机落在不同CPU核心上,缓存命中率暴跌。

修复方法很简单:

# 查看网卡中断号
cat /proc/interrupts | grep eth0

# 绑定到CPU核心0-3
echo 0f > /proc/irq/xxx/smp_affinity

改完之后,P99延迟从120微秒降到了8微秒。你看,环境配置的细节,往往决定了性能的天花板。

总结一句话:性能测试不是跑个分就完事了。你得搞清楚测什么、怎么测、环境对不对。这三个问题想明白了,后面的优化才有方向。


专注资料整理