实战派 JMeter 指南:核心功能、并发压测实操与常见问题解决方案

引言

之前写了 SaaS 订单系统技术架构解析与并发优化方案

那么我们现在来了解如何进行压测。

什么是 JMeter?

Apache JMeter 是一款 100% 纯 Java 应用程序,最初由 Apache Software Foundation 开发用于测试 Web 应用程序的性能,后来扩展到测试其他功能。它是一个开源工具,可用于:

  • 测试静态和动态资源、Web 动态应用程序的性能

  • 模拟服务器、服务器组、网络或对象上的重负载

  • 测试系统强度或分析不同负载类型下的整体性能

JMeter 的核心功能

  1. 多协议支持:HTTP/HTTPS、SOAP、REST、FTP、JDBC、LDAP、JMS、SMTP、POP3 等

  2. 负载测试:模拟大量用户并发访问系统

  3. 性能测试:测量响应时间、吞吐量等关键性能指标

  4. 功能测试:验证应用程序功能正确性

  5. 分布式测试:多台机器协同工作,模拟大规模负载

  6. 可扩展性:通过插件机制扩展功能

  7. 结果分析:提供丰富图表和报告功能

JMeter 的典型应用场景

  1. Web 应用性能测试:模拟用户访问网站行为,测试网站性能

  2. API 测试:测试 REST、SOAP 等接口的性能和功能

  3. 数据库性能测试:通过 JDBC 测试数据库查询性能

  4. 负载均衡测试:验证负载均衡策略有效性

  5. 压力测试:确定系统在极限负载下的表现

  6. 回归测试:确保新版本不会引入性能退化

JMeter 基本组件

  1. 测试计划 (Test Plan):JMeter 测试的起点和容器

  2. 线程组 (Thread Group):定义虚拟用户的数量和行为

  3. 取样器 (Sampler):发送不同类型请求(HTTP、FTP 等)

  4. 监听器 (Listener):收集和展示测试结果

  5. 配置元件 (Config Element):设置默认值和变量

  6. 前置处理器 (Pre-Processor):请求前执行操作

  7. 后置处理器 (Post-Processor):请求后执行操作

  8. 断言 (Assertion):验证响应是否符合预期

  9. 定时器 (Timer):控制请求之间的延迟

  10. 逻辑控制器 (Logic Controller):控制请求的执行流程

JMeter 入门指南

1. 安装 JMeter

  1. 确保已安装 Java 环境(JDK 1.8 或更高版本)

  2. 从 Apache JMeter 官网下载最新版本

  3. 解压下载的压缩包

  4. 运行 bin 目录下的脚本:

**

2. 创建测试计划(测试订单接口)

以下为测试订单接口的基本流程:

  1. 启动 JMeter 后,自动创建空测试计划

  2. 右键点击 "Test Plan" → Add → Threads (Users) → Thread Group

  3. 在 Thread Group 中配置参数:

  • 线程数:模拟的并发用户数(如 100 表示 100 个用户同时请求)

  • Ramp-Up 时间(秒):启动所有线程的总时间(如 10 秒启动 100 线程→每秒启动 10 个,避免瞬间压垮系统)

  • 循环次数:每个线程发送请求的次数(选 "永远" 则持续发送,需手动停止)

  1. 创建 token:
  1. 右键点击 Thread Group → Add → Sampler → HTTP Request

  2. 在 HTTP Request 中配置服务器名称、路径等参数:

  • 需获取对应返回值:
  • 使用方式:
  1. 右键点击 Thread Group → Add → Listener → View Results Tree

  2. 点击工具栏绿色运行按钮开始测试:

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 个线程

  • 推荐配置:

  1. 每台机器控制 1000~2000 并发线程

  2. 采用分布式压测(JMeter Master + 多个 Slave 节点)

常见问题与解决方案

  1. 内存不足错误:调整 JMeter 启动脚本中的堆内存设置

  2. 连接被拒绝:检查目标服务器运行状态及防火墙设置

  3. 结果不准确:确保测试环境稳定,排除网络波动影响

  4. 测试结果差异大:多次测试取平均值,保证测试环境一致性

结语

JMeter 作为功能强大且灵活的性能测试工具,已成为软件质量保证的重要组成部分。通过本文介绍,您应已对 JMeter 有基本了解。

实践建议:从简单测试计划入手,逐步尝试复杂功能与场景,积累经验后设计更精确、高效的性能测试方案,为系统性能优化提供支持。

注意事项:性能测试并非一次性工作,需持续进行。将 JMeter 集成到持续集成 / 持续交付 (CI/CD) 流程中,可及早发现性能问题,确保应用程序始终保持最佳状态。

相关推荐
青鱼入云2 小时前
IDEA源码阅读神器-Diagram工具
java·ide·intellij-idea
占疏2 小时前
访问日志查询功能
java·服务器·flask
Java水解2 小时前
Spring容器初始化扩展点:ApplicationContextInitializer
后端·spring
星光一影2 小时前
Java版社交系统/聊天系统/im/即时通信/社交通讯
java·spring boot·mysql·交友
R.lin2 小时前
对接物联网使用netty通信与MQTT之间的区别
java·物联网
AI_56782 小时前
CI/CD自动化部署革命:“三分钟流水线“背后的工程实践
java·开发语言·人工智能·ai·neo4j
dragoooon343 小时前
[Linux——Lesson23.线程概念与控制:线程基础]
java·开发语言·jvm
带刺的坐椅3 小时前
Solon Web 的“分身术”:单应用多端口监听,化身多重服务
java·web·solon·端口·单体多模块
装不满的克莱因瓶3 小时前
【项目亮点】基于EasyExcel + 线程池解决POI文件导出时的内存溢出及超时问题
java·jvm·excel·线程池·async·虚拟机·easyexcel