实战派 JMeter 指南:核心功能、并发压测实操与常见问题解决方案
引言
之前写了 SaaS 订单系统技术架构解析与并发优化方案
那么我们现在来了解如何进行压测。
什么是 JMeter?
Apache JMeter 是一款 100% 纯 Java 应用程序,最初由 Apache Software Foundation 开发用于测试 Web 应用程序的性能,后来扩展到测试其他功能。它是一个开源工具,可用于:
-
测试静态和动态资源、Web 动态应用程序的性能
-
模拟服务器、服务器组、网络或对象上的重负载
-
测试系统强度或分析不同负载类型下的整体性能
JMeter 的核心功能
-
多协议支持:HTTP/HTTPS、SOAP、REST、FTP、JDBC、LDAP、JMS、SMTP、POP3 等
-
负载测试:模拟大量用户并发访问系统
-
性能测试:测量响应时间、吞吐量等关键性能指标
-
功能测试:验证应用程序功能正确性
-
分布式测试:多台机器协同工作,模拟大规模负载
-
可扩展性:通过插件机制扩展功能
-
结果分析:提供丰富图表和报告功能
JMeter 的典型应用场景
-
Web 应用性能测试:模拟用户访问网站行为,测试网站性能
-
API 测试:测试 REST、SOAP 等接口的性能和功能
-
数据库性能测试:通过 JDBC 测试数据库查询性能
-
负载均衡测试:验证负载均衡策略有效性
-
压力测试:确定系统在极限负载下的表现
-
回归测试:确保新版本不会引入性能退化
JMeter 基本组件
-
测试计划 (Test Plan):JMeter 测试的起点和容器
-
线程组 (Thread Group):定义虚拟用户的数量和行为
-
取样器 (Sampler):发送不同类型请求(HTTP、FTP 等)
-
监听器 (Listener):收集和展示测试结果
-
配置元件 (Config Element):设置默认值和变量
-
前置处理器 (Pre-Processor):请求前执行操作
-
后置处理器 (Post-Processor):请求后执行操作
-
断言 (Assertion):验证响应是否符合预期
-
定时器 (Timer):控制请求之间的延迟
-
逻辑控制器 (Logic Controller):控制请求的执行流程
JMeter 入门指南
1. 安装 JMeter
-
确保已安装 Java 环境(JDK 1.8 或更高版本)
-
从 Apache JMeter 官网下载最新版本
-
解压下载的压缩包
-
运行 bin 目录下的脚本:
-
Windows:jmeter.bat
-
Linux/Mac:jmeter.sh
**

2. 创建测试计划(测试订单接口)
以下为测试订单接口的基本流程:
-
启动 JMeter 后,自动创建空测试计划
-
右键点击 “Test Plan” → Add → Threads (Users) → Thread Group
-
在 Thread Group 中配置参数:

-
线程数:模拟的并发用户数(如 100 表示 100 个用户同时请求)
-
Ramp-Up 时间(秒):启动所有线程的总时间(如 10 秒启动 100 线程→每秒启动 10 个,避免瞬间压垮系统)
-
循环次数:每个线程发送请求的次数(选 “永远” 则持续发送,需手动停止)
- 创建 token:


-
右键点击 Thread Group → Add → Sampler → HTTP Request
-
在 HTTP Request 中配置服务器名称、路径等参数:

- 需获取对应返回值:


- 使用方式:

-
右键点击 Thread Group → Add → Listener → View Results Tree
-
点击工具栏绿色运行按钮开始测试:

3. 分析测试结果
JMeter 提供多种监听器查看分析结果:
-
View Results Tree:显示每个请求的详细结果
-
Summary Report:提供测试的统计摘要
-
Aggregate Report:汇总多个采样器的结果
-
Response Time Graph:显示响应时间变化趋势
-
HTML Report Dashboard:生成专业的 HTML 报告
并发测试实践
1. 测试并发 1000


测试无异常。
2. 测试并发 10000
**

报错信息
- JMeter(客户端)报错:
java.net.SocketException: Socket closed
- 服务端报错:
java.io.IOException: Connection reset by peer
报错原因分析
TCP 连接在未正常收发完数据前被对方中断,属于并发压测引起的连接层异常,非业务代码问题。
| 报错位置 | 含义 | 原因 |
|---|---|---|
| JMeter(客户端)Socket closed | 客户端 Socket 被自己关闭或线程中止 | 线程池 / 连接数过多、内存不足、请求超时、强制中断 |
| 服务端 Connection reset by peer | 对端(客户端)关闭连接,但服务端未写完响应 | 客户端提前断开 TCP |
完整逻辑:JMeter 关闭连接 → Tomcat 正在写响应 → 写操作失败 → 报 Connection reset by peer
解决与优化方案
一、从 JMeter 客户端入手:控制线程数
-
不建议单机启动 10,000 个线程
-
推荐配置:
-
每台机器控制 1000~2000 并发线程
-
采用分布式压测(JMeter Master + 多个 Slave 节点)
常见问题与解决方案
-
内存不足错误:调整 JMeter 启动脚本中的堆内存设置
-
连接被拒绝:检查目标服务器运行状态及防火墙设置
-
结果不准确:确保测试环境稳定,排除网络波动影响
-
测试结果差异大:多次测试取平均值,保证测试环境一致性
结语
JMeter 作为功能强大且灵活的性能测试工具,已成为软件质量保证的重要组成部分。通过本文介绍,您应已对 JMeter 有基本了解。
实践建议:从简单测试计划入手,逐步尝试复杂功能与场景,积累经验后设计更精确、高效的性能测试方案,为系统性能优化提供支持。
注意事项:性能测试并非一次性工作,需持续进行。将 JMeter 集成到持续集成 / 持续交付 (CI/CD) 流程中,可及早发现性能问题,确保应用程序始终保持最佳状态。
