JMeter 最初被设计用于 Web 应用测试,但后来扩展到了其他测试领域,可用于测试静态和动态资源,如静态文件、Java小服务程序、CGI 脚本、Java 对象、数据库和服务器等等。JMeter 可对服务器、网络或对象模拟巨大的负载,在不同压力类别下测试它们的强度和分析整体性能。另外,JMeter 能够对应用程序做功能回归测试,通过创建带有断言的脚本来验证程序是否返回了期望结果。为了最大限度的灵活性,JMeter 允许使用正则表达式创建断言。
Apache JMeter 快速部署与详细配置教程
JMeter 是 Apache 开源的压测工具,支持 HTTP/HTTPS、数据库、MQ、TCP 等协议。生产压测必须用无 GUI 模式,GUI 只用来录脚本和调试。
一、环境要求
- JDK 8+(JMeter 5.6+ 推荐 JDK 8/11/17)
- 至少 2C4G 压测机
- 压测机和被测服务器要分开,否则结果不准
二、安装 JDK
# CentOS7
yum install java-17-openjdk -y
# Ubuntu/Debian
apt install openjdk-17-jdk -y
# 验证
java -version
三、下载并安装 JMeter
Linux
cd /opt
# 下载(替换版本号到官网最新)
wget https://dlcdn.apache.org/jmeter/binaries/apache-jmeter-5.6.3.tgz
tar -zxvf apache-jmeter-5.6.3.tgz
mv apache-jmeter-5.6.3 jmeter
# 配置环境变量
echo 'export JMETER_HOME=/opt/jmeter' >> /etc/profile
echo 'export PATH=$PATH:$JMETER_HOME/bin' >> /etc/profile
source /etc/profile
# 验证
jmeter -v
Windows
- 官网下载 binaries 版
.zip:https://jmeter.apache.org/download_jmeter.cgi - 解压到
D:\apache-jmeter-5.6.3 - 配置
JAVA_HOME环境变量 - 双击
bin/jmeter.bat启动 GUI
四、首次启动 GUI(仅用于脚本调试)
jmeter
第一次启动是英文界面,切换中文:
- 菜单
Options→Choose Language→Chinese (Simplified)
五、调整 JVM 内存(重要,否则大并发 OOM)
编辑 bin/jmeter(Linux)或 jmeter.bat(Windows):
# 找到 HEAP 行,改成
HEAP="-Xms4g -Xmx4g"
# GC 配置
NEW="-XX:NewSize=512m -XX:MaxNewSize=512m"
压测机内存多大就给多少,最大不超过物理内存的 80%。
六、核心概念速记
- Test Plan:整个测试计划
- Thread Group:线程组(虚拟用户数)
- Sampler:取样器(HTTP 请求等)
- Listener:监听器(结果查看、聚合报告)
- Config Element:配置元件(HTTP 请求默认值、Cookie)
- Timer:定时器(思考时间)
- Assertion:断言(校验响应)
七、编写一个 HTTP 压测脚本(GUI 流程)
- 右键 Test Plan → 添加 → 线程(用户)→ 线程组
- 线程数:100(并发用户)
- Ramp-Up 时间:10(10 秒内启动完)
- 循环次数:10
- 右键线程组 → 添加 → 配置元件 → HTTP 请求默认值
- 服务器:
example.com,端口443,协议https
- 服务器:
- 右键线程组 → 添加 → 取样器 → HTTP 请求
- 方法 GET,路径
/api/ping
- 方法 GET,路径
- 右键线程组 → 添加 → 监听器 → 查看结果树 / 聚合报告
- 保存为
test.jmx
八、命令行压测(生产必用)
GUI 模式吃资源,正式压测用 non-GUI:
jmeter -n -t test.jmx -l result.jtl -e -o ./report
参数:
-n:non-GUI 模式-t:测试脚本-l:结果文件-e:测试结束后生成 HTML 报告-o:报告输出目录(必须为空或不存在)
常用参数
# 只跑不生成报告
jmeter -n -t test.jmx -l result.jtl
# 指定并发数覆盖脚本(不修改jmx)
jmeter -n -t test.jmx -Jthreads=200 -Jrampup=20 -Jloop=100
# 指定压力机远端
jmeter -n -t test.jmx -r
九、HTML 报告解读
跑完后打开 ./report/index.html,关键指标:
- Statistics:每个接口的平均 RT、90/95/99 线、吞吐量、错误率
- Error:错误分布
- Response Time Over Time:RT 随时间变化
- Throughput:吞吐量(TPS)
关注:
- 90% Line / 99% Line(长尾延迟)
- 吞吐量拐点(TPS 不再上升、RT 飙升 = 系统瓶颈)
- 错误率必须 < 0.1%
十、分布式压测(单机压不够时)
单机一般压到 1000~2000 并发就到瓶颈,要更多并发就分布式。
1. Agent 机器(压测执行机)
编辑 bin/jmeter.properties:
server.rmi.ssl.disable=true
server_port=1099
启动 Agent:
jmeter-server
防火墙放行 1099 以及 RMI 随机端口(或固定 server.rmi.localport=50000)。
2. Master 机器(控制机)
编辑 bin/jmeter.properties:
remote_hosts=192.168.1.11:1099,192.168.1.12:1099
server.rmi.ssl.disable=true
启动:
jmeter -n -t test.jmx -r -l result.jtl -e -o ./report
所有机器 JMeter 版本、插件、JDK 必须完全一致。
十一、常用插件管理
插件管理器 jmeter-plugins-manager
- 下载
jmeter-plugins-manager.jar:https://jmeter-plugins.org/wiki/PluginsManager/ - 放到
lib/ext/ - 重启 GUI → Options → Plugins Manager
- 推荐装:
- Custom Thread Groups:并发线程组(Stepping Thread Group)
- PerfMon:压测时监控被测机 CPU / 内存
- Dummy Sampler
- BlazeMeter:录制脚本
录制脚本
- GUI → Templates → Recording
- 配置浏览器代理指向
localhost:8888 - 浏览器操作一遍业务,自动生成 HTTP 请求
十二、被测机监控(配合 PerfMon)
在被测服务器启动 ServerAgent:
# 下载 ServerAgent
unzip ServerAgent-2.2.3.zip
./startAgent.sh
JMeter 里加 PerfMon Metrics Collector,填被测机 IP 和 4444 端口,压测时同步收集 CPU / 内存 / 网络。
十三、常见问题
- 启动 GUI 乱码:
jmeter启动前加export LANG=zh_CN.UTF-8,或改bin/jeter.bat加-Dfile.encoding=UTF-8。 - 大并发 OOM:调大
HEAP,用 non-GUI,关监听器。 - 吞吐量上不去:
- 压测机自身瓶颈(CPU / 网络)
- 增加分布式 agent
- 检查 JVM GC
- HTTPS 证书报错:HTTP 请求 勾掉
Use proxy,或导入证书到 truststore。 - 登录态 / Token 丢失:用 HTTP Cookie 管理器 + 正则表达式提取器 / JMeter 后置处理器把 token 传给下一个请求。
- 报告打不开:
-o目录必须是空的或不存在,先rm -rf report。 - 分布式 agent 连不上:防火墙、版本一致、
server.rmi.ssl.disable=true。
十四、压测标准流程
- 在 GUI 里调试脚本(少量线程跑通)
- 保存 jmx
- 命令行预热(先跑 50 并发 5 分钟)
- 阶梯加压:100 → 300 → 500 → 1000
- 每档稳定跑 10~15 分钟
- 看 RT、TPS、错误率,找拐点
- 出 HTML 报告归档
十五、目录速查
/opt/jmeter/
├── bin/ 启动脚本、jmeter.properties
├── lib/ext/ 插件 jar
├── extras/ Ant 报告模板
└── printable_doc/ 帮助文档
十六、一句话总结
- 调试用 GUI,正式压测用
-n - 压测机和被测机分开
- 关注 90/99 分位 RT,不是平均值
- 大并发用分布式 + PerfMon 监控











暂无评论内容