Ubuntu下JMeter如何进行负载测试
小樊
32
2025-11-28 22:54:41
Ubuntu下使用JMeter进行负载测试
一 环境准备与安装
安装 Java 11 (推荐 OpenJDK 11 Headless):sudo apt-get install openjdk-11-jdk-headless ;验证:java -version。
安装 JMeter 5.x :从官网下载二进制包 apache-jmeter-5.6.3 .tgz,解压至 /opt/jmeter ,并加入 PATH:
sudo mv apache-jmeter-5.6.3 /opt/jmeter
echo ‘export JMETER_HOME=/opt/jmeter’ >> ~/.bashrc
echo ‘export PATH=$JMETER_HOME/bin:$PATH’ >> ~/.bashrc
source ~/.bashrc
验证:jmeter -v。
注意:不要使用 apt 安装 JMeter(仓库版本如 2.13 过旧,易报错)。
二 编写测试计划
在图形界面(jmeter)中新建测试计划,添加线程组:设置 Number of Threads(并发数) 、Ramp-Up Period(秒) 、Loop Count(循环次数) 。
添加 HTTP 请求 取样器:配置协议、服务器名/IP、端口、方法、路径、参数或 Body Data(JSON) 。
添加 HTTP Header Manager 设置请求头(如 Content-Type: application/json)。
添加 断言 (如 JSON Assertion、Response Assertion)验证业务正确性。
添加监听器:常用 查看结果树 、聚合报告 ;如需导出 HTML 报告,可添加 Summary Report 或使用非 GUI 模式生成。
参数化与数据驱动:添加 CSV Data Set Config ,准备数据文件,字段与接口参数一一对应。
常见增强:
同步定时器(Synchronizing Timer) 实现集合点,瞬间施压;
逻辑控制器 控制请求流程;
需要代理访问时,在取样器“高级”中配置代理主机与端口。
三 非GUI执行与结果分析
非 GUI 执行(推荐):
基本:jmeter -n -t test.jmx -l result.jtl
生成 HTML 报告:jmeter -n -t test.jmx -l result.jtl -e -o report/ (报告目录需为空)
批量与参数化执行示例(按线程数递增,重复多次取均值):
for threadCount in $(seq 100 100 1000 ); do
for i in {1…10 }; do
jmeter -n -t test.jmx -J threadNum=$threadCount -l testcsv/test${threadCount}-${i}.csv -e -o testReport/test${threadCount}-${i}
sleep 1
done
done
结果查看与分析:
命令行聚合报告关注:Throughput(吞吐量,/s) 、Average(平均响应时间) 、Error % 、90%/95%/99% Line 。
HTML 报告位于 -o 指定目录;若数据量大,可直接读取报告目录下的 statistics.json ,取 Total 对象的 throughput 字段用于对比与汇总。
四 分布式压测与高并发场景
适用场景:单机受限于 CPU/内存/网络 IO ,需要模拟 上万并发 时,使用 JMeter 分布式。
架构与前提:
角色:控制节点(Master) 与 工作节点(Slave) ;
要求:各节点 JMeter 版本一致 、网络互通、防火墙开放相关端口;
原理:Master 分发指令,Slave 产生实际压力,结果回传汇总。
快速步骤:
在 Master 与所有 Slave 安装相同版本的 JDK 与 JMeter ;
在 Master 的 $JMETER_HOME/bin/jmeter.properties 中配置 remote_hosts=slave1_ip:1099,slave2_ip:1099 ;
在 Slave 上启动 jmeter-server ;
Master 执行:jmeter -n -t test.jmx -R slave1_ip:1099,slave2_ip:1099 -l result.jtl -e -o report/ ;
资源监控:在目标服务器部署 ServerAgent 并启动,JMeter 端通过 PerfMon 插件采集 CPU/内存/网络/磁盘 指标,便于定位瓶颈。
五 常见问题与最佳实践
版本与依赖:避免 apt 安装 JMeter;确保 Java 11 与 JMeter 5.6.x 匹配;分布式节点版本保持一致。
资源与并发:单机并发不宜过高(经验值不超过 50 线程/进程),更高并发使用分布式;必要时增加 Ramp-Up Period 平滑加压。
数据与路径:参数化文件(CSV)在各 Slave 上保持 相同路径与文件名 ;若使用外部依赖(JAR/证书等),同步到各节点。
网络与防火墙:确保 Master 与 Slave、以及压测机到目标服务的 端口与策略 正确放行。
报告与稳定性:优先使用 非 GUI 模式执行;测试前后做 基线对比 与 多次取平均 ;结合 响应断言 与 监控指标 共同判断瓶颈。