资讯详情

JMeter性能测试实战指南:从环境搭建到高并发压测分析

📅 2026/9/30 16:35:22 | 华诺云谱 👁 阅读
JMeter性能测试实战指南:从环境搭建到高并发压测分析
从第一次用JMeter做压测到现在这工具我已经用了快十年。中间换过公司、换过项目从单体应用到微服务从小型网站到日活千万级的系统压测这事始终绕不开JMeter。它开源、跨平台、协议支持广社区资料也足够多只要你愿意折腾几乎没有测不了的东西。这篇博文不打算做成官方文档的复读机而是想跟你聊聊实际做压力测试时怎么把JMeter真正用起来从环境搭建到方案设计从脚本编写到结果分析把一套能落地的流程完整走一遍。这篇内容适合谁看正在学性能测试的测试工程师需要自己搞定压测的后端开发以及给项目做技术验收的负责人。跟着这套思路走哪怕你之前完全没碰过JMeter也能在半天内搭出第一个靠谱的压测脚本并且能准确判断系统到底能扛多少并发。1. 动手前先想清楚压力测试到底在测什么压力测试这四个字很多人理解成开一堆线程去请求接口看会不会挂。这个理解不能算错但太粗糙了。做压测之前你先得回答一个问题这次压测的目标是什么1.1 压力测试的核心目标分类不同目标的压测设计思路完全不一样。我通常把压测目标分成三类第一类是容量验证。系统上线前产品经理说预期峰值是每秒2000个请求那你要验证的就是系统在2000 QPS下能不能稳定运行响应时间在不在SLA范围内。这种压测的重点是达标测完输出一份结论支持、勉强支持、还是不支持。第二类是瓶颈定位。系统已经出现性能问题线上RT飙高你怀疑是数据库慢查询、Redis连接不够、还是应用线程池被打满。这时候压测的目的不是测出最大并发而是通过逐步加压观察各环节的指标变化把瓶颈挖出来。第三类是稳定性验证。系统要跑7x24小时你得用略高于日常的负载持续压测几个小时甚至几天看内存会不会泄漏、连接会不会被耗尽、Full GC频率会不会越来越高。目标定了后面所有设计才有依据。如果你一上来就乱压一气最后只能得到一堆毫无说服力的数字。1.2 JMeter在其中的定位和优势JMeter在压测工具里算是最普及的一档。同类的工具还有LoadRunner、Gatling、k6等但JMeter的优势非常明显第一开源免费。LoadRunner的企业版授权贵得离谱JMeter则完全没有这个问题装上就能用。第二协议支持面广。HTTP、HTTPS、WebSocket、JDBC、JMS、FTP、MQTT常见协议都有原生或插件支持。可扩展性也够你甚至可以写Java代码自定义Sampler。第三学习曲线比较平缓。图形界面操作直观录制脚本的功能虽然不算最强但配合Badboy或者手动编写HTTP请求大部分场景都能覆盖。第四数据采集和分析能力足够。聚合报告、查看结果树、用表格查看结果这些监听器再加上后端监听器配合InfluxDBGrafana能构建出非常完整的监控体系。说白了JMeter不是性能最好、功能最强的工具但在够用和易用之间它找到了一个黄金平衡点。2. 环境准备与基础配置压测机器的环境搭不好测试结果就没有参考价值。JMeter本身是Java应用吃内存比较厉害尤其是并发线程数上去之后JVM参数配不好就会出现OOM或者频繁GC导致你分不清是系统扛不住还是压测机自己先挂了。2.1 JDK下载与JMeter安装教程JMeter运行依赖JDK建议直接装JDK 8以上的LTS版本。JDK 8虽然老但兼容性最好JDK 11和JDK 17也都可以JMeter 5.4以上的版本都支持。安装步骤很简单去Oracle官网或Adoptium下载JDK安装后配置JAVA_HOME环境变量把%JAVA_HOME%\bin加到PATH里。打开命令行输入java -version确认安装成功。去JMeter官网下载最新版本的二进制压缩包Windows下载zipLinux或macOS下载tgz。解压后进入bin目录Windows下双击jmeter.batLinux下执行jmeter.sh。注意JMeter安装目录不要放在带空格或中文的路径下比如E:\Program Files\apache-jmeter-5.6有时候会因为路径解析问题导致插件加载失败。2.2 初始化JVM内存参数JMeter默认的JVM堆内存只有1GB并发数一高压测机就卡成了PPT。我一般在jmeter.bat或jmeter.sh里手动调整堆内存参数把初始堆和最大堆调大。找到bin目录下的jmeter文件Windows下是jmeter.batLinux下是jmeter.sh打开后找到HEAP-Xms1g -Xmx1g -XX:MaxMetaspaceSize256m这一行改成HEAP-Xms4g -Xmx4g -XX:MaxMetaspaceSize512m内存分配多少取决于你压测机的物理内存。如果压测机有16G内存最多分配8G给JMeter剩下的留给操作系统和其他监控工具。要注意JMeter本身是Java进程堆内存给得越大GC暂停时间越长极端情况下反而影响压测结果因为线程调度会出现明显的停顿。2.3 插件管理器必装的几个扩展JMeter原生功能够用但有些场景必须要插件。插件管理器是必装项下载JAR包放到lib/ext目录重启JMeter后就能在选项菜单里看到Plugins Manager。我用得最多的几个插件Custom Thread Groups比原生线程组更灵活的并发模型比如阶梯加压、Arrivals Thread Group做容量测试时非常有用。PerfMon Metrics Collector配合ServerAgent使用可以监控压测机器的CPU、内存、磁盘IO。Throughput Shaping Timer配合Constant Throughput Timer使用能精确控制压测的吞吐量用来做按目标QPS压测的实验。这些插件安装后别全开按需加载插件过多会增加脚本启动和运行的性能开销。3. 性能测试方案设计从需求到具体场景方案设计是压测的蓝图也是最体现功力的环节。方案设计得好压测做起来事半功倍设计得粗后面全是坑。3.1 性能指标参数的设定与计算设计压测方案时你需要盯住几个核心指标并发用户数Concurrent Users同时在线并发操作的用户数。这个数字不是拍脑袋定的需要根据业务预估来算。公式如下 [ 并发用户数 \frac{PV}{T} \times t ] 其中PV是单日页面访问量T是访问时长一般取8小时即28800秒如果是低频系统就按6小时算t是单次请求的平均耗时单位秒。举个例子某系统单日PV为86.4万平均请求耗时200ms那么并发用户数 864000 / 28800 × 0.2 ≈ 6。这样算出来的是系统平均并发数实际上忙时峰值可能达到平均值的3到5倍所以你需要再乘以一个峰值系数。吞吐量TPS/QPS每秒事务数是压测结果里最核心的指标。压测前要根据业务目标确定期望的TPS。比如接口A日调用量100万次集中在4小时高峰内那需要支撑的TPS就是 1000000 / (4 × 3600) ≈ 70。响应时间RT从发出请求到收到完整响应的时间。通常看平均值Avg、90分位p90、95分位p95、99分位p99。注意平均值会掩盖长尾问题比如平均500ms但p99是3秒说明有1%的请求体验极差这个性能也是不合格的。错误率失败请求占总请求的比例。高并发场景下一般要求低于0.1%核心交易链路要求低于0.01%。3.2 压测类型选择并发测试、容量测试还是负载测试方案里要明确本次压测属于哪一型不同型的做法差异很大。负载测试Load Testing模拟预期正常负载验证系统能否稳定支撑。做法是设定一个目标并发数或TPS持续跑10到30分钟观察各项指标是否达标。压力测试Stress Testing逐步加大负载直到系统达到瓶颈或崩溃找出系统的极限在哪。做法是阶梯加压比如每5分钟涨50个线程持续观察系统拐点。容量测试Volume Testing确定系统在满足性能要求的前提下能支撑的最大并发用户数或数据量。这通常和容量规划配套进行。稳定性测试Soak Testing在较长时间内如8小时、24小时、72小时维持一定负载观察系统是否出现内存泄漏、性能劣化等问题。我见过很多系统在15分钟压测时表现亮眼但跑满4小时就出现内存溢出稳定性测试就是这么暴露问题的。实际项目中这些测试类型经常组合出现。比如先做负载测试验证达标再做压力测试找出极限容量最后抽时间跑稳定性测试。3.3 场景设计的业务逻辑考量压测脚本不是简单地对接口发起请求而是要尽量模拟真实用户行为。比如一个电商系统你不能只压测商品查询接口因为真实用户会经历登录-搜索-查看详情-加购-下单-支付的完整链路。场景设计的关键点有两个第一接口比例要符合真实流量。假设线上数据是搜索接口占60%、详情占25%、下单占10%、支付占5%那你的压测模型也要按这个比例来分配请求。第二要处理好前置数据。比如压测下单接口前提是库里要有商品和库存用户要有登录态和地址。前置数据不准备好压测一开始就大量报错你根本无法判断是系统问题还是脚本问题。我会在加压前先跑一遍小并发比如单线程跑几十次确认脚本本身没问题再上正式压力。4. JMeter脚本核心实操从新建线程组到监听器分析理论说了不少现在进入实操环节。假设我们要对某个查询接口做压测接口信息如下请求方式POST请求地址https://api.example.com/search请求参数{keyword: 手机, page: 1}4.1 创建测试计划与线程组配置打开JMeter后先保存一个测试计划再开始创建线程组。右键测试计划 - 添加 - 线程 - 线程组。线程组里有几个关键参数线程数模拟的并发用户数初始可以从50开始。Ramp-Up Period所有线程启动完成所需的时间秒。比如50个线程Ramp-Up设为10秒那么每秒启动5个线程。这样设置的好处是避免瞬间启动大量线程导致压测机自身负载突变影响测试数据。循环次数每个线程执行多少次请求。如果勾选了永远就会一直跑直到手动停止。我建议刚开始做压测时用调度器Scheduler来控制压测时长而不是用循环次数。这样更容易控制压测节奏比如设定Duration为600秒就稳定压测10分钟。4.2 HTTP请求与HTTP头管理器配置在线程组下添加 - 采样器 - HTTP请求。核心配置协议https服务器名称或IPapi.example.com端口号443HTTP请求方法POST路径/searchBody Data填入 {keyword: 手机, page: 1}如果你需要模拟真实浏览器的请求头比如User-Agent、Accept、Content-Type就添加 - 配置元件 - HTTP头管理器。一般至少设置Content-Type: application/json User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)把请求头加上主要是防止后端把没有UA的请求当爬虫拦截掉或者因Content-Type不对直接返回415。4.3 参数化实现从CSV读取测试数据压测中不能每个请求都用同一份数据。比如压测登录接口如果你1000个并发用户都用同一个账号密码Redis或数据库里对应的会话只有一个测出来的结果完全失真。这时候就需要参数化。最常用的做法是CSV Data Set Config。步骤准备一个data.csv文件每一列是一个参数比如username,password user1,123456 user2,123456 user3,123456在线程组下添加 - 配置元件 - CSV Data Set Config。配置文件名指向data.csv变量名称填username,password分隔符用逗号。在HTTP请求的Body Data里引用变量{username: ${username}, password: ${password}}这里有个重要细节CSV Data Set Config的共享模式有三种所有线程All threads、当前线程组Current thread group、当前线程Current thread。默认是所有线程意味着每个线程都会从头开始读取数据。如果你想每个线程用不同的数据就把共享模式改为当前线程同时把CSV文件里的数据条数至少配到线程数那么多。4.4 Beanshell断言与JSON提取器断言的作用是判断请求是否真的成功。HTTP请求即使返回200内容也可能是一段错误信息。比如后端返回了指定格式的错误码你需要在断言里检测错误码才能把这类请求判定为失败。在HTTP请求下添加 - 断言 - JSON断言可以判断返回的JSON里某个字段是否符合预期Path$.codeExpected Value200勾选JSON Path exists或者Additionally assert value如果遇到更复杂的判断逻辑比如要把多个字段组合校验或者做条件判断就需要Beanshell断言。添加 - 断言 - BeanShell断言代码示例String response prev.getResponseDataAsString(); if (!response.contains(\code\: 200)) { Failure true; FailureMessage Response code is not 200, actual: response; }注意Beanshell的执行性能比较差在高并发场景下会成为瓶颈。如果只是简单断言优先用响应断言或JSON断言只有逻辑复杂时才用Beanshell。另一个高频操作是提取响应中的某个值给下一个请求用这里推荐使用JSON Extractor。在HTTP请求下添加 - 后置处理器 - JSON ExtractorNames of created variablestokenJSON Path expression$.data.tokenMatch Numbers1Default ValuesNOT_FOUND提取到token后在后续请求里用${token}引用即可。我在微服务压测中经常这样串联接口链路比如先登录拿token再带token去查订单。4.5 测试计划执行与聚合报告解读脚本配置完成后先不急着上高并发。把线程数改成1跑一次确认能通。然后逐渐加到10、50、100观察结果。查看结果最常用的监听器是聚合报告Summary Report在线程组下添加 - 监听器 - 聚合报告。里面的关键列指标含义参考基准Samples请求总数越大越准确Average平均响应时间与业务要求对齐Min/Max最小/最大响应时间看波动范围Std.Dev.标准差越小越稳定Error%错误率一般要求0.1%Throughput吞吐量每秒请求数核心容量指标Received KB/sec每秒接收数据量关注带宽瓶颈Sent KB/sec每秒发送数据量关注上行带宽我看聚合报告的习惯是先看Error%如果错误率低于0.1%再关注Average和p95。如果Average正常但p95特别高说明存在少数慢请求拖尾需要排查热点资源竞争。提示聚合报告的Throughput才是你的成果但注意这是压测机视角的数据只能在压测机没成为瓶颈的前提下使用。5. 进阶录制HTTPS脚本、WebSocket与数据库压测基础的HTTP请求压测学会之后还有几个常见场景值得掌握。这些场景日常开发中经常遇到官方文档讲得少网上资料又零散我踩过的坑汇总一下。5.1 HTTPS脚本录制方法对于没有接口文档、无法手工编写脚本的系统录制是唯一的选择。JMeter支持通过HTTP代理服务器录制HTTPS脚本基本步骤如下测试计划下添加 - 非测试元件 - HTTP代理服务器端口设置为8888。目标控制器选测试计划线程组这样录制的请求会直接落在线程组下。设置HTTPS证书JMeter会自动生成一个证书浏览器需要信任它。在JMeter的bin目录下找到ApacheJMeterTemporaryRootCA.crt安装到系统受信任的根证书颁发机构。浏览器设置代理为127.0.0.1:8888。在代理服务器中点击启动浏览器里正常操作业务。操作完成后停止代理录制的请求出现在线程组下。录制HTTPS脚本最常见的问题是证书不被信任。解决方法是把生成的CA证书下载后用管理员身份导入浏览器的受信任根证书存储区导入完务必重启浏览器。录制完成后脚本里会混入大量静态资源的请求比如CSS、JS、图片。如果你要压测的是API接口这些资源请求可以直接删掉否则会严重拖慢压测速度而且数据完全没有参考价值。我一般用筛选器设置排除规则直接排除 .js、.css、.png、.jpg 等后缀。5.2 WebSocket接口压测做WebSocket压测前首先要装插件在Plugins Manager中搜索WebSocket Samplers by Peter Doornbosch并安装重启JMeter后会看到 WebSocket 相关的采样器。常用的场景是消息推送和实时通信。一个最简单的WebSocket采样器配置Server Name or IPws.example.comPort8080Protocolws如果走TLS就是wssPath/socketWebSocket压测和HTTP压测最大的区别在于HTTP是一发一收WebSocket是建立连接后持续收发。这意味着你的线程数不能完全等同于连接数因为一个线程可以发多条消息、收多条消息。我在做WebSocket压测时一般会用WebSocket Single Read Sampler和WebSocket Ping/Pong Sampler来精确控制消息的收发频率。5.3 JDBC Request实现数据库参数化取值压测中经常需要查数据库验证数据一致性或者用数据库里的真实数据作为接口请求参数。JDBC Request是JMeter连接数据库做查询的采样器。首先在测试计划下添加配置元件 - JDBC Connection Configuration关键配置Variable Name for created pool随意命名比如db_poolDatabase URLjdbc:mysql://localhost:3306/test_db?useSSLfalseJDBC Driver Classcom.mysql.cj.jdbc.DriverUsername/Password数据库账号密码然后在采样器里添加 - JDBC RequestSQL Query填写查询语句。执行后查询结果可以通过变量获取。如果要取第一行第一列用${db_pool_1}取第1行第2列用${db_pool_1_2}如果要遍历所有行就需要在SQL Query里配合循环控制器使用。注意压测时尽量别在压测机上直接连接生产数据库执行重型查询大量JDBC查询会占用压测机的CPU和内存而且可能拖垮生产库。最佳实践是使用独立的压测环境或者将查询语句优化到最小化。6. 高并发压测实战以R23压力测试软件为例的完整流程前面讲了JMeter的核心用法这节我们串起来做一个完整的实战案例。假设我们要对一套类似R23压力测试场景CPU高负载密集型系统进行压测验证单节点K8S上部署的微服务系统能否在高并发下稳定运行。6.1 实战背景与测试目标某业务系统跑在单节点K8S集群上需要验证其在云服务器上的承载能力。压测人员通过JMeter脚本做高并发测试验证迁移后的系统能否支撑线上峰值流量。业务模型的流量特征如下首页查询接口GET /api/home占比40%商品详情接口GET /api/product/{id}占比30%下单接口POST /api/order占比20%支付回调接口POST /api/pay/callback占比10%目标系统在200并发用户下平均响应时间小于500msp95小于1000ms错误率小于0.1%。6.2 压测脚本结构设计这个场景最合理的做法是设计一个业务链路测试计划而不是对每个接口单独压。因为真实用户是一整套操作流程走下来的只压单个接口无法发现跨服务的性能瓶颈。测试计划结构如下Test Plan ├── CSV Data Set Config (读取商品ID、用户ID) ├── JDBC Connection Configuration (连接数据库校验) ├── Thread Group (200线程, Ramp-Up 60秒, 持续300秒) │ ├── HTTP Header Manager (统一管理请求头) │ ├── 登录请求 (POST /api/auth/login) │ │ └── JSON Extractor (提取token) │ ├── 首页查询 (GET /api/home) │ ├── 商品详情循环控制器 (读取商品ID列表) │ │ └── 商品详情请求 (GET /api/product/${productId}) │ ├── 下单请求 (POST /api/order) │ │ └── 响应断言 (校验下单结果) │ ├── 支付回调请求 (POST /api/pay/callback) │ │ └── JSON 断言 (校验回调结果) │ └── 监听器 (聚合报告、用表格查看结果)这里有个容易踩坑的地方登录请求不应该在压测循环里执行太多次。真实用户不会每操作一次就重新登录一次登录请求一般是获取一次token后续请求复用。所以登录请求应该放在线程组外或者放在线程组的仅一次控制器下。6.3 阶梯加压与性能拐点测试正式压测前先用阶梯加压的方式摸清系统性能拐点。这里用Custom Thread Groups插件中的Ultimate Thread Group终极线程组更直观第一批启动50线程持续120秒第二批在第一批基础上增加50线程至100线程持续120秒第三批继续增加50线程至150线程持续120秒第四批继续增加50线程至200线程持续120秒每一批都观察平均响应时间和错误率的变化趋势。如果某一批开始响应时间出现明显跳变比如从300ms直接涨到2000ms说明系统已经接近瓶颈了。阶梯加压的好处是你能找到系统的拐点这个拐点比最大并发数更有参考价值。比如200并发时RT是800ms250并发时RT突然变成3000ms那这个系统的设计容量就应该定在200并发左右而不是250。6.4 压测结果与系统指标联合分析压测过程中光看JMeter的画面还不够你还需要盯住服务端的资源指标。用PerfMon插件配合ServerAgent采集压测机的CPU、内存、磁盘和网络再结合服务的监控面板比如Prometheus/Grafana或云监控做联合分析。常见的指标关联场景JMeter的平均RT从300ms涨到1200ms同时监控面板显示应用服务器的CPU使用率从40%涨到98%说明瓶颈在应用服务器计算能力。平均RT涨了但应用服务器CPU不高不到50%数据库的CPU却飙到了90%以上那瓶颈在数据库。平均RT涨了应用和数据库指标都正常但网络出口带宽跑满了那就得看是不是响应报文过大或者压缩没开。压测完输出报告时不要只给一个测试结果要把JMeter的吞吐量、错误率、响应时间数据与服务端的CPU、内存、GC、数据库慢查询等指标放在一起对照。这样别人看了才算是有说服力的性能报告。7. 常见问题与排查技巧实录压测过程中遇到的问题五花八门这里把出现频率最高的几个问题整理出来基本都是我踩过坑之后的总结。7.1 java.io.IOException: Error writing to server这个报错我几乎每次压测都遇到过通常是客户端与服务端之间的连接被重置。可能的原因有三个第一服务端主动断开了连接。比如Nginx的proxy_read_timeout设置得太短或者后端容器线程池拒绝了请求。排查方法是看服务端日志里有没有连接超时或异常断开记录。第二压测机与服务端之间的网络层断连。比如防火墙、负载均衡器设置了过短的空闲连接超时时间导致请求还在处理中连接就被回收了。第三JMeter本身的连接不够用。HTTP请求默认开启KeepAlive当服务端达到连接上限时新连接无法建立。可以尝试在HTTP请求的HTTP Client实现里选择httpclient4并调整JMeter的socket超时和连接超时配置来缓解。7.2 多线程下脚本运行卡顿严重压测脚本本身如果写得有问题高并发时会很卡。最常见的元凶是我前面说过的Beanshell脚本。Beanshell有个特点它是解释执行的性能非常差。如果你在断言或前置处理器里用了Beanshell线程数一旦上到100JMeter的CPU使用率会直接飙升压测数据全部失真。解决办法有两个一是能用JSON断言/响应断言解决的尽量不用Beanshell二是如果一定要用脚本改用JSR223 Sampler GroovyGroovy执行性能比Beanshell好很多两个方案执行效率差距甚至可以到10倍以上。还有一个卡顿原因是监听器用得太多。查看结果树这类监听器在调试阶段有用正式压测时建议全部关掉或者改成简单数据写入器把结果写入文件避免把数据都堆在内存里。7.3 压测结果中大量409/429错误码压力测试中出现409Conflict或429Too Many Requests说明系统有防重或限流机制。很多开发者压测时不理解这个误以为系统性能不够。排查思路检查响应体里是否带有限流提示比如Too many requests、Rate limit exceeded。如果是限流导致的说明压测触发了系统的自我保护机制这本身说明系统是健康的。你要联系开发确认限流阈值然后把压测并发控制在线程内。如果是409 Conflict特别是POST请求很可能是重复提交被拦截了。比如下单接口如果压测脚本没有对订单号做参数化每个线程都用同一个订单号就会触发唯一索引约束报409。解决方法是把订单号、流水号等关键字段做参数化或随机化。8. 实战心得与效率提升技巧最后聊一些个人经验这些经验每次讲给别人听的时候都被说早听到就好了。8.1 用命令行模式跑压测JMeter的图形界面GUI本身会吃掉不少资源高并发下GUI的渲染刷新会让压测机性能劣化。正式压测时跑命令行模式是标配jmeter -n -t test_plan.jmx -l results.jtl -e -o report_dir参数说明-n非GUI模式NoGUI-t指定测试计划文件-l输出采样结果文件JTL格式-e生成HTML报表-o报表输出目录跑完之后用浏览器打开report_dir里的index.html就能看到非常完整的HTTP报告响应时间分布、吞吐量趋势、错误率变化、活跃线程数等比GUI里的聚合报告详细得多。这个命令是我使用频率最高的JMeter命令强烈建议新手直接养成非GUI模式跑压测的习惯。8.2 压测前置检查清单压测开始前把这几个问题全部过一遍能省下大量排查时间压测机和目标服务器之间网络是否通畅延时高不高。压测环境的数据库是否有充足的历史数据表里是否为空。目标服务的日志级别是否调到了INFO如果还是DEBUG级别压测产生的日志量会拖垮磁盘IO。是否需要用独立压测机避免压测机上的其他进程抢占资源。服务端的连接数、线程池、超时时间是否已经调整过还是用的默认值。压测脚本里有没有残留的调试用监听器比如查看结果树、断言结果。按这个清单走一遍你踩坑的概率会降低至少一半。8.3 结果分析怎样的指标才算健康这点我觉得值得单独拿出来强调。压测完拿到一堆数据怎么判断系统健壮我的判断标准是错误率必须为0或者无限接近0。如果压测有一定的错误率首先要排查脚本是否配对了参数化、账号是否够用而不是急着说系统有问题。响应时间随并发递增的曲线应尽量平滑。如果并发从100涨到200平均RT从300ms变成了1500ms说明系统架构中可能存在串行锁或连接池瓶颈而不是单纯CPU性能不足。吞吐量的增长应该有线性区。一开始并发增加TPS跟着涨到一定程度后TPS增长变缓甚至下降说明系统开始过载继续加并发只会让RT飙升。我自己见过很多看起来很高的压测结果比如TPS很漂亮但仔细一查压测机上的线程数一多脚本就崩了根本压不到系统极限。所以压测的精髓不在跑得多高而在于场景设计得真不真结果分析得透不透。另外再说个细节压测报告里不要只关心均值p99和最大响应时间同样重要。用户感受到的卡顿往往是那1%的极端慢请求造成的。一个系统如果平均值只有200ms但p99到了10秒那在用户体验层面就跟下线了没区别。分析的时候把这两个维度都写进报告说服力会强得多。8.4 扩展思路把JMeter接入CI/CD流水线压测最理想的状态是每天代码合入后自动跑一轮冒烟性能验证。JMeter支持用命令行触发这就让它非常容易接入CI/CD流水线。比如在Jenkins、GitLab CI里加一个job当代码合入主干后自动跑一个5分钟的回归压测脚本把吞吐量、错误率、p95响应时间和基线做对比如果劣化超过阈值就阻止合并。我所在的团队就是用这种方法把性能回归问题提前到了开发阶段发现而不是上线前才爆出来。这个思路对开发流程的收益非常大强烈建议你所在的项目组也这样做。这次关于JMeter做压力测试的分享就到这里。工具始终只是工具真正决定压测质量的是你对业务的理解和对性能原理的掌握。每次压测结束多问自己一句为什么会出现这个结果积累的经验多了性能问题在你眼里就会慢慢从玄学变成可解释、可预测、可优化的事情。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑