压力测试实战指南:JMeter 5.x深度解析与QPS/TPS性能优化

发布于:2025-03-21 ⋅ 阅读:(28) ⋅ 点赞:(0)

一、压力测试基础概念

1.1 什么是压力测试?

  • 定义:模拟极端负载场景验证系统性能极限

  • 目的:发现性能瓶颈、评估系统可靠性、验证容错能力

  • 常见类型:负载测试、压力测试、稳定性测试、峰值测试

1.2 核心性能指标解析

1.2.1 QPS(Query Per Second)
  • 每秒请求处理量

  • 适用场景:API接口、静态资源访问

  • 计算公式:总请求数 / 测试时间(s)

1.2.2 TPS(Transaction Per Second)
  • 每秒事务处理量

  • 事务定义:包含多个关联操作的完整业务流程

  • 典型应用场景:支付系统、订单提交

  • 1.2.3 QPS与TPS对比
    维度 QPS TPS
    衡量对象 单一请求 完整业务链
    复杂度
    数据关联性

LoadRunner

  • 性能稳定,压测结果及细粒度大

  • 可以自定义脚本进行压测

  • 缺点:太过于重量级,功能比较繁多

Apache AB(单接口压测最方便)

  • 模拟多线程并发请求

  • 对压测机资源要求低(低CPU/内存占用),但对目标服务器负载压力大

  • 简单DDOS攻击等场景适用

Webbench

  • 通过fork多个子进程循环发送请求,子进程结果通过pipe汇总到父进程

  • 统计结果简单直接

JMeter

  • 开源免费,功能强大,互联网公司普遍使用

  • 支持协议广泛:

    1. Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET等)

    2. SOAP/REST Webservices

    3. FTP

    4. 数据库(JDBC)

    5. LDAP轻量目录访问协议

    6. 消息中间件(JMS)

    7. 邮件协议(SMTP(S)/POP3(S)/IMAP(S))

    8. TCP等

  • 核心优势

    1. 功能测试

    2. 压力测试

    3. 分布式压力测试

    4. 纯Java开发

    5. 上手容易,高性能

    6. 提供测试数据分析

    7. 多种报表数据图形展示

二、JMeter 5.x工具入门

2.1 环境搭建

  1. 前置条件:JDK 8+环境配置

  2. 安装步骤

      bin:核心可执行文件,包含配置 jmeter.bat: windows启动文件(window系统一定要配置显示文件拓展名) jmeter: mac或者linux启动文件 jmeter-server:mac或者Liunx分布式压测使用的启动文件 jmeter-server.bat:window分布式压测使用的启动文件 jmeter.properties: 核心配置文件

      extras:插件拓展的包

      lib:核心的依赖包

  1. 界面概览

    • 测试计划树形结构

    • 线程组配置区

    • 监听器结果展示

2.2 核心组件详解

2.2.1 线程组(Thread Group)
  • 参数配置

    • 线程数:模拟并发用户量

    • Ramp-Up时间:逐步加压时间

    • 循环次数:测试重复次数

2.2.2 采样器(Samplers)
  • HTTP请求

  • JDBC请求

  • FTP请求

2.2.3 监听器(Listeners)
  • 聚合报告

  • 响应时间图

  • 事务控制器(Transaction Controller)

三、全链路压力测试实施 

3.1 测试场景设计

测试计划
├─ 线程组 (500并发)
│  ├─ CSV数据配置
│  ├─ HTTP登录请求
│  ├─ 商品查询请求
│  └─ 订单提交事务
└─ 聚合报告监听器

3.2 关键配置参数

  1. HTTP请求默认值:统一管理域名/端口

  2. 定时器

    • 固定定时器(模拟思考时间)

    • 高斯随机定时器

  3. 断言:响应状态码/内容验证

3.3 分布式测试配置

  1. 控制机配置jmeter.properties

    remote_hosts=192.168.1.101:1099,192.168.1.102:1099

    四、测试结果深度分析

    4.1 核心指标解读

    指标 健康阈值 异常处理方案
    平均响应时间 <2s 检查数据库索引
    错误率 <0.1% 验证参数边界条件
    90%响应时间 <3s 优化慢查询语句

    4.2 可视化分析技巧

  2. 响应时间趋势图:识别毛刺现象

  3. TPS波动曲线:发现系统瓶颈点

  4. 服务器监控集成

    • PerfMon插件使用

    • 内存/CPU关联分析

五、性能优化黄金法则

5.1 应用层优化

  • 代码级优化:

    // 优化前
    for(int i=0; i<list.size(); i++){...}
    
    // 优化后
    int size = list.size();
    for(int i=0; i<size; i++){...}
  • 缓存策略:

    • Redis热点数据缓存

    • 本地缓存Guava Cache

5.2 数据库优化

  1. 索引优化:

    • 使用EXPLAIN分析执行计划

    • 复合索引最左匹配原则

  2. 分库分表策略:

    • 按用户ID哈希分片

    • 时间维度历史数据归档


六、经典案例实战分析

6.1 电商秒杀场景

  • 测试目标:5000 QPS峰值处理能力

  • 特殊配置

    • 同步定时器(Synchronizing Timer)

    • 随机商品ID参数化

  • 优化成果

    • TPS从120提升至480

    • 响应时间降低65%

6.2 微服务API压测

  1. 链路压测方案

    • 使用Transaction Controller封装业务流

    • 跨服务传递TraceID

  2. 瓶颈定位

    • 网关限流配置不合理

    • 服务间调用超时设置

七.实战测试 

 7.1将压缩包解压,打开目录结构启动测试工具

7.2进入主页面 

首先汉化 

进入正题测试 

线程数:虚拟用户数。一个虚拟用户占用一个进程或线程

准备时长(Ramp-Up Period(in seconds)):全部线程启动的时长,比如100个线程,20秒,则表示20秒内 100个线程都要启动完成,每秒启动5个线程

循环次数:每个线程发送的次数,假如值为5,100个线程,则会发送500次请求,可以勾选永远循环

名称:采样器名称
注释:对这个采样器的描述
web服务器:
  默认协议是http
  默认端口是80
  服务器名称或IP :请求的目标服务器名称或IP地址

路径:服务器URL

 填写相关的信息

启动springboot程序