压力测试需要监控客户端(响应速度)、服务器端(资源消耗)和数据库端(锁与吞吐)三个维度的数据。
1. 性能指标
TPS(每秒事务数)/QPS(每秒查询数):
定义:系统每秒处理的事务数/查询数。
压力测试意义:观察TPS随并发数增加的变化曲线。当并发数增加但TPS不再上升甚至下降时,即达到系统瓶颈。
响应时间:
定义:从发出请求到收到完整响应的时间。
关键值:通常关注95线或99线(即95%或99%的请求响应时间),而不是平均值,因为平均值会掩盖少数慢请求的问题。
并发用户数:
定义:同一时间点对系统施加压力的真实用户数或线程数。
压力测试意义:寻找系统能支撑的最大并发数以及导致系统崩溃的极限并发数。
2. 服务器资源指标
CPU使用率:若CPU长期超过85%,说明处理能力达到上限;若CPU很低但TPS上不去,可能存在锁或IO瓶颈。
内存使用:监控是否存在内存泄漏(随着测试时间延长,内存占用持续升高且不回落)。
磁盘I/O:读写磁盘的等待时间。压力过大时,磁盘I/O会成为主要瓶颈。
网络带宽:检查是否带宽跑满导致响应变慢。
3. 数据库与中间件指标
数据库连接数:连接池是否被占满。
慢查询日志:压力下是否出现大量慢SQL。
锁等待:数据库表或行级锁的竞争情况。
队列长度:对于消息队列或线程池,观察请求排队长度是否持续增加(排队过长意味着处理不过来,即将崩溃)。
4. 稳定性与错误指标
错误率:通常要求错误率<0.1%(或根据合同规定,如1%)。压力测试中要关注在哪个压力点开始出现超时或报错。
资源释放情况:测试结束后,内存和连接数是否回落到正常水平,验证系统是否能从高压状态恢复。