尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

JMeter安装配置实战:JDK匹配、环境变量与命令行压测

JMeter安装配置实战:JDK匹配、环境变量与命令行压测 先放结论JMeter 这个开源性能测试工具做接口压测、功能测试、分布式压测基本是测试开发岗位的标配技能了。这玩意儿是 Apache 基金会出的用纯 Java 写的所以跨平台做得很好只要你有 JDK 环境Windows、macOS、Linux 都能跑而且免费生态插件又全这也是为什么培训班、企业项目里到处都是它。这篇博文不发空话纯粹就是一篇 JMeter 下载及安装配置的实操记录从版本怎么选、JDK 怎么配、环境变量怎么搞、踩过的坑怎么绕到怎么快速跑通第一个 HTTP 压测脚本全部写清楚。适合刚入行准备做接口测试的测试新人也适合被分配了临时压测任务、需要快速搭环境的开发同事。看完这篇你至少能自己装出一套可用的 JMeter 环境并且能用命令行跑出带 HTML 报告的性能测试结果。1. JMeter 到底是什么凭什么大家都在用1.1 历史背景与核心定位JMeter 最早其实是用来做 Web 应用压力测试的后来慢慢扩展接口测试、数据库测试、FTP、JMS 消息服务、甚至 WebService 都能覆盖。它的底层是 Java 虚拟机那套机制所以只要你机器上装了对应版本的 JDK基本上解压就能用不需要复杂的安装引导。核心定位说白了就三件事模拟大量并发用户、采集接口/应用的性能指标、生成可视化的测试报告。很多人把它和 Postman 对比其实不对。Postman 是单用户调试接口的JMeter 是模拟成千上万多用户同时打你的服务看服务扛不扛得住响应时间、吞吐量、错误率这些都能出来。1.2 核心组件和它的工作机制初学者刚打开 JMeter 会蒙那一堆名词都是啥。我帮你捋一下核心骨架测试计划Test Plan最顶层的容器你所有配置都在它下面。线程组Thread Group一个线程代表一个虚拟用户线程数就是并发数Ramp-Up 时间控制多少秒内把线程发完循环次数控制跑多久。Sampler取样器真正干活的节点比如 HTTP 请求、JDBC 请求、JMS 请求。监听器Listener负责展示结果比如查看结果树、聚合报告、用表格查看结果。断言Assertion判断请求是否成功响应里包含什么关键字算通过。配置元件Config Element比如 HTTP 请求默认值可以设置统一的协议、域名、端口下面所有请求直接继承。你的脚本本质就是一棵树测试计划下挂线程组线程组下挂各种 Sampler、断言、监听器。JMeter 执行的时候会按线程组配置的并发数创建虚拟用户每个用户循环跑你定义的请求链。1.3 结合热搜词聊一聊大家最关心的进阶方向从这套环境出来之后大家搜得最多的是 jmeter beanshell 断言、jmeter 上传文件、jmeter 录制 https 脚本、jmeter 动态调整 qps、jmeter 下载 mqtt 插件。这些都是在基础环境搞定之后才会碰到的进阶场景。比如 beanshell 断言本质是 JMeter 内置了一个脚本引擎你可以在断言里写 Java 风格的脚本做复杂逻辑判断录制 https 脚本要求你装 JMeter 的 CA 证书然后在浏览器设置代理就能把抓包变成 JMeter 脚本MQTT 插件则是通过 Plugins Manager 在线安装用于物联网场景的消息吞吐测试。这些内容都很好但地基是你得先把 JMeter 跑起来、把环境变量路径配对否则插件装得再勤快启动的时候还是直接报错。2. 下载前先想清楚版本怎么选JDK 怎么匹配2.1 JMeter 版本与 JDK 版本对应关系表我见过太多人卡在这步下了 JMeter 5.6.3结果机器上装的还是 JDK 8双击 bat 文件直接报 UnsupportedClassVersionError。问题不出在下载环节是版本没对齐。我整理了实际工作中用的对应关系直接照着选JMeter 版本最低 JDK 版本推荐 JDK 版本备注JMeter 5.4.xJDK 8JDK 8/11老项目常用最稳JMeter 5.5.xJDK 8JDK 8/11兼容性好教程多JMeter 5.6.xJDK 11JDK 11/17新功能多推荐新项目用JMeter 5.7.x 及之后JDK 11JDK 17版本较新注意插件兼容一个简单的判断逻辑如果你拿不准就装 JDK 11 JMeter 5.6.3。这个组合我实测下来最省心插件生态成熟网上搜到的资料也多。2.2 去哪下载最靠谱JMeter 是 Apache 基金会的项目官网是jmeter.apache.org。进去之后找 Download Releases页面上会有两个主要内容一个是源码包Source一个是二进制包Binaries。咱们直接下 Binaries 里的 zip 包就行。不过官方服务器的下载速度经常很感人尤其你在国内的时候等半小时都下不完。我一般这么干首选清华镜像站mirrors.tuna.tsinghua.edu.cn/apache/jmeter/binaries/目录下面按版本号排列找到apache-jmeter-5.6.3.zip这种文件下载速度比官网快很多。次选阿里云镜像mirrors.aliyun.com/apache/jmeter/binaries/速度和清华差不多哪个能连上就用哪个。需要历史版本的去archive.apache.org/dist/jmeter/binaries/所有老版本都有。2.3 二进制包和源码包怎么分二进制包文件名一般是apache-jmeter-5.6.3.zip解压之后直接有 bin、lib、docs 这些目录开箱即用。源码包一般是apache-jmeter-5.6.3_src.zip里面是 Java 源码需要 Maven 编译打包正常人不用碰这个。还有一个小细节下载之后一定要核对压缩包大小正常二进制包是 100MB 左右。如果下下来只有几十 KB99% 是网络问题导致下载不完整解压必失败。2.4 插件版本与 JMeter 版本的匹配JMeter 的插件管理器和各种扩展插件比如 PerfMon 监控、Custom Thread Groups、MQTT 插件都有版本兼容要求。插件的官方市场是jmeter-plugins.org它推出的 Plugins Manager 小工具支持在线搜索安装插件但插件版本过低或过高都会导致 JMeter 启动报错。如果你要装插件最好遵循一个原则先保证 JMeter 主版本能正常启动再去装插件装插件失败导致无法启动时把lib/ext目录下对应 jar 移除重启即可回滚。3. 全平台下载与安装实操文件放哪、解压到哪3.1 Windows 环境最多人踩坑的安装方式Windows 下安装 JMeter 很简单没有安装引导程序就是解压。但很多人栽在文件路径上。JMeter 的安装路径绝对不要有中文、不要有空格、不要有括号。我之前见过有人放在D:\软件\压测工具\apache-jmeter(1)这个目录结果启动直接卡死控制台报一堆路径解析异常。JMeter 是基于 Java 的Java 在处理非 ASCII 字符路径时会有各种幺蛾子。正确的做法是在 D 盘或者 C 盘根目录建一个纯英文的目录比如D:\apache-jmeter-5.6.3。我自己习惯把压缩包解压到D:\apache-jmeter-5.6.3这个路径下目录结构是这样的bin\可执行脚本启动入口jmeter.bat、jmeter.sh、jmeter.propertieslib\核心依赖库扩展 jar 包也往这里放lib/ext 是插件目录docs\离线文档接口 API 说明printable_docs\PDF 版用户手册Windows 双击bin/jmeter.bat就行。如果你在命令行操作可以cd D:\apache-jmeter-5.6.3\bin jmeter.bat。3.2 macOS 环境新版系统要额外处理的权限问题macOS 上解压 zip 包之后先看bin目录下有没有可执行权限。如果是从浏览器下载的macOS 的 Gatekeeper 会拦截未签名应用右键打开可能提示“应用已损坏”或“无法验证开发者”。解决方案是到系统设置 - 隐私与安全性里点击“仍要打开”或者直接在终端执行chmod x /path/to/apache-jmeter-5.6.3/bin/jmeter然后运行/apath/to/apache-jmeter-5.6.3/bin/jmeter另外 macOS 上如果你配置了 zsh 的环境变量路径之后的jmeter命令才能全局用否则每次都要敲一长串。3.3 Linux 服务器环境无图形界面压测机的安装方式压测机上一般不装图形界面安装方式和 Windows 大同小异但要注意 JDK 也要装 headless 版本。# 创建目录 mkdir -p /opt/jmeter cd /opt/jmeter # 下载二进制包以 5.6.3 为例 wget https://mirrors.tuna.tsinghua.edu.cn/apache/jmeter/binaries/apache-jmeter-5.6.3.zip # 解压 unzip apache-jmeter-5.6.3.zip # 添加全局启动脚本软链接 ln -s /opt/jmeter/apache-jmeter-5.6.3/bin/jmeter /usr/local/bin/jmeter # 验证版本 jmeter -v这样你就能在任意目录下执行jmeter -n -t xxx.jmx -l result.jtl进行命令行压测了。4. 配置才是重头戏环境变量、JVM 内存、properties 参数4.1 JDK 安装与 JAVA_HOME 配置JMeter 依赖 JDK所以第一步先确认你机器上有没有装。打开终端Windows 就是 cmd执行java -version如果提示找不到命令那就要先装 JDK。我推荐装 JDK 11 或者 JDK 17注意不要装 JRE如果你机器上只有 JREJMeter 虽然能跑但编译插件或者某些高级功能会受限。Windows 下配置环境变量的步骤如下右键“此电脑” - 属性 - 高级系统设置 - 环境变量。在“系统变量”区域点击“新建”变量名填JAVA_HOME变量值填 JDK 的安装根目录比如C:\Program Files\Java\jdk-17.0.5。找到Path变量点击编辑新增一行%JAVA_HOME%\bin。打开新的 cmd 窗口执行java -version能输出版本号就说明 JDK 配好了。这里有个很多人都会犯的错配置完环境变量之后不打开新窗口仍在旧窗口敲命令导致 Java 版本没变甚至找不到命令。Windows 的环境变量是在进程启动时读取的旧窗口不会自动刷新一定记得开新的 cmd 窗口再验证。4.2 JMETER_HOME 与 PATH 配置配置JMETER_HOME不是必须的但强烈建议配一下。好处是你可以在任意目录下直接执行jmeter命令不用每次都切到 bin 目录。Windows 下面新建系统变量JMETER_HOME变量值填 JMeter 解压后的根目录比如D:\apache-jmeter-5.6.3。编辑 Path新增%JMETER_HOME%\bin。这样你在任意目录下执行jmeter -v能显示版本信息说明全局命令配置生效了。有个细节如果你用的 JMeter 根目录名字很长配置JMETER_HOME后后续更新 JMeter 版本只需要改变量值不用改 Path维护起来方便很多。4.3 JVM 内存参数调优为什么默认 512MB 不够用JMeter 本身是 Java 应用默认启动内存一般是 512MB 到 1GB。做功能测试问题不大但你一旦开几百个线程做压测保存大量响应数据内存很快就满了报java.lang.OutOfMemoryError: Java heap space。这个问题的根源在于JMeter 在运行时要存储每个线程的运行上下文、请求结果、断言结果等对象并发线程数越高、监听器越重内存消耗越大。所以压测之前调 JVM 参数是必须的。Windows 下改bin/jmeter.bat找到如下内容set HEAP-Xms1g -Xmx1g -XX:MaxMetaspaceSize512m我习惯改成set HEAP-Xms2g -Xmx4g -XX:MaxMetaspaceSize512m-Xms是初始堆大小-Xmx是最大堆大小。压测机内存如果有 8GB可以适当给 JMeter 分 4GB如果机器内存紧张也别强塞JVM 堆设置超过物理可用内存会导致启动失败或者频繁 GC。Linux/macOS 下改bin/jmeter脚本找到HEAP-Xms1g -Xmx1g -XX:MaxMetaspaceSize512m改成同样的值。改完之后重启 JMeter 生效。4.4 jmeter.properties 里值得改的几个参数JMeter 的配置文件是bin/jmeter.properties用文本编辑器打开里面几乎所有条目都有注释。我挑几个最常用的改动默认语言新版 JMeter 支持中文界面改这一行languagezh_CN注意前面如果有#注释要去掉保存后重启。响应数据编码解决中文乱码。搜索sampleresult.default.encoding去掉注释改成sampleresult.default.encodingUTF-8结果文件保存字段命令行压测生成的 jtl 文件默认只保存部分信息。如果你需要详细的响应时间、字节数、线程名等搜索jmeter.save.saveservice相关配置按需取消注释。常用的是jmeter.save.saveservice.output_formatcsv jmeter.save.saveservice.response_datafalse jmeter.save.saveservice.samplerDatafalse jmeter.save.saveservice.thread_countstrue jmeter.save.saveservice.byte_counttrue jmeter.save.saveservice.print_thread_nametrue jmeter.save.saveservice.print_response_time_in_mstrue这些配置直接影响压测结果文件的完整度拿到一个残缺的 jtl 再回头补压是很浪费时间的。5. 启动验证与第一个压测脚本GUI 和命令行都跑通5.1 启动前检查清单配置完环境之后不要着急双击图标先按顺序做三个检查避免启动失败后回去猜原因java -version确认 JDK 版本和架构64 位系统要装 64 位 JDK。jmeter -v确认全局命令能找到 JMeter 的 bin 目录。检查 JMeter 目录下的bin权限Linux/macOS 要确保脚本有执行权限。全部没问题的话Windows 双击jmeter.bat或者命令行输入jmeterJMeter 的 GUI 应该会弹出来。5.2 5 分钟跑通一个最简单的 HTTP 请求第一次打开 JMeter看到的界面是空的测试计划。我带你建一个最简单但完整的 HTTP 请求压测脚本右键点击“测试计划” - 添加 - 线程组。在线程组面板上配置线程数填10Ramp-Up 时间填1循环次数填10。这样表示 1 秒内启动 10 个线程每个线程循环跑 10 次合计 100 个请求。右键点击“线程组” - 添加 - 取样器 - HTTP 请求。在 HTTP 请求面板填写协议http服务器名称或 IPwww.baidu.com端口号80方法GET路径/右键点击“线程组” - 添加 - 监听器 - 聚合报告。点击顶部绿色三角号“启动”按钮。跑完之后看聚合报告你会看到 Average平均响应时间、Median中位数响应时间、Error%错误率、Throughput每秒请求数这些关键指标。这个脚本虽然简单但它背后的执行逻辑和整套工具操作路径已经通了。5.3 命令行模式才是压测的正确打开方式GUI 模式适合写脚本和调试真正跑压力测试千万不要用 GUI。一方面 GUI 本身会吃掉大量 CPU 和内存干扰压测结果另一方面在生产环境压测机上通常没有显示器你必须用命令行模式。先保存你的测试计划假设保存为test.jmx然后执行jmeter -n -t test.jmx -l result.jtl -e -o report参数解释-n非 GUI 模式-t指定 JMX 脚本文件-l指定结果文件jtl 或 csv-e测试结束后生成 HTML 报告-oHTML 报告输出目录必须为空目录跑完之后打开report/index.html能看到全套的报告面板请求汇总、响应时间分布图、每秒事务数、错误率曲线等。这个报告是 JMeter 官方自带的可视化方案比 GUI 里手动截图好看得多。如果你需要调整压测时的 QPS 或者并发又不想改 JMX 文件可以在命令行通过属性覆盖。JMeter 允许用-J参数动态设置任意 JMeter 属性配合脚本里的${__P(变量名, 默认值)}函数实现jmeter 动态调整 qps这个功能后续可以单开一篇专门讲。6. 安装配置阶段的常见问题速查表这个表是我这些年帮同事排坑攒下来的几乎每个新人都卡在同样的问题上。问题现象可能原因解决办法双击 jmeter.bat 闪退命令行也没看到错误JAVA_HOME 没配置或者配错在 cmd 里执行java -version确认能正常输出再检查 JAVA_HOME 路径是否指到 JDK 根目录而不是 bin 目录报错 UnsupportedClassVersionErrorJDK 版本低于 JMeter 要求升级 JDK或者换成对应低版本的 JMeter打开 GUI 时界面全是小方块或乱码JDK 字体缺失或版本兼容问题换 OpenJDK 官方发行版避免使用裁剪版 JRE调整系统字体渲染中文乱码响应数据显示乱码编码没有指定 UTF-8修改 jmeter.properties 里sampleresult.default.encodingUTF-8请求返回 301/302 重定向跟随重定向没开HTTP 请求的“跟随重定向”勾选上或者检查请求地址是否输入了默认端口录制 HTTPS 脚本时找不到 JMeter 证书没生成或没导入 CA 证书用 http 方式先录制或参考官方文档生成 apache-jmeter-5.6.3/bin 下的证书文件导入浏览器信任列表压测时内存溢出 OutOfMemoryError堆内存太小调整 jmeter.bat / jmeter 里的 HEAP 参数调大 -Xmx插件管理器装不上或无法在线安装网络不通或插件源连不上配置代理或者在 jmeter-plugins.org 手动下载 plugin 的 jar 包放到 lib/ext 目录命令行执行 jmeter -v 提示不是内部命令PATH 没配重新配置 JMETER_HOME 和 PATH确认新窗口生效6.1 双击 jmeter.bat 闪退的排查思维闪退这种事图形界面双击看不出来问题必须回到 cmd 里跑。先cd到JMeter的bin目录输入jmeter.bat让错误信息留在控制台里这时候基本都能看到是 JAVA_HOME 路径问题还是版本问题。最经典的坑就是 JAVA_HOME 配到了C:\Program Files\Java\jdk-17.0.5\bin但实际上 JAVA_HOME 必须指到 JDK 的根目录bin是让 PATH 去加的。配错之后 javac 找不到JVM 也起不来但 cmd 里那个窗口闪一下就没了你根本来不及看报错。6.2 证书和录制 HTTPS 脚本相关JMeter 录制 HTTPS 脚本的原理是JMeter 内置一个 HTTP 代理服务器浏览器把请求转发给它它记录下所有请求。HTTPS 流量是加密的要想让 JMeter 能解密就需要安装 JMeter 的 CA 证书。安装过程是打开 JMeter GUI - 选项 - SSL Manager选择生成的证书然后在浏览器里设置代理指向localhost:8888访问一个 HTTPS 网站确认能正常打开说明证书已生效。这个过程遇到问题时多半是浏览器版本更新了证书信任策略需要把 JMeter 的证书导入到系统证书库而不是浏览器证书库。6.3 中文乱码和响应编码问题很多人在聚合报告里看到响应数据变成一堆乱码第一反应是系统区域语言问题其实根源在于 JMeter 请求和响应的默认编码。HTTP 请求元件里有个“内容编码”字段如果你请求的时候没指定默认可能用 ISO-8859-1 解析。解决方案分两步走全局默认编码修改jmeter.properties的sampleresult.default.encodingUTF-8。单独的 HTTP 请求在 HTTP 请求面板的“内容编码”填UTF-8。跑完之后查看结果树里的响应数据通常就正常了。6.4 插件装不上怎么办JMeter 插件安装最简单的方式是下载 Plugins Manager 的 jar 包放到lib/ext目录下重启 JMeter然后通过“选项 - Plugins Manager”在线搜索安装。如果在线安装失败大概率是插件市场连不上或网络受限。这时的备选方案是到jmeter-plugins.org搜索你需要的插件手动下载对应版本的 jar然后放到lib/ext目录重启 JMeter。注意lib和lib/ext不要搞混。lib是 JMeter 自身依赖lib/ext是扩展插件的专用目录。放错位置 JMeter 不会报错但它就是加载不到那个插件。7. 每天用下来的几个习惯和心得我最近几年不管是在本地写测试脚本还是到服务器上压测都严格走一套固定的工作流GUI 调试 - 保存 JMX - 命令行跑压测 - 生成 HTML 报告 - 存档。这个流程一旦跑通后续任何项目都是复制粘贴改参数的事情。如果你只打算装一次 JMeter 就扔在那那环境和配置随便弄弄也问题不大。但如果你像我一样要长期依赖它做性能测试我建议你从一开始就把 JDK、JMETER_HOME、JVM 内存分配这些配置一次性调到位别等到真正发起大规模压测的时候才发现机器快崩了。最后分享一个小技巧JMeter 的官网下载页面和镜像站经常同步不及时如果你发现镜像站里最多只到某个版本而官网已经有更新的版本那就直接去 Apache Archive 翻历史版本稳定压倒一切。压测工具不是越新越好你团队里别人用的什么版本你就跟着用什么版本省去互相传脚本时各种兼容性扯皮的问题。
返回列表