JMeter在Ubuntu上如何高效运行
小樊
41
2025-11-28 22:48:37
Ubuntu上高效运行JMeter的实用指南
一 基础环境快速到位
- 安装 Java 8/11/17(Ubuntu 推荐 OpenJDK):sudo apt update && sudo apt install -y default-jdk
- 下载并解压 Apache JMeter(二进制包,无需安装):
- wget https://downloads.apache.org/jmeter/binaries/apache-jmeter-X.Y.Z.tgz
- tar -xzf apache-jmeter-X.Y.Z.tgz && cd apache-jmeter-X.Y.Z
- 建议使用非 GUI 模式执行压测:./bin/jmeter -n -t your.jmx -l result.jtl
- 可选:将 JMETER_HOME/bin 加入 PATH,便于全局执行 jmeter 命令。
二 非GUI执行与报告生成
- 标准命令行模板:
- 仅保存结果:jmeter -n -t test.jmx -l result.jtl
- 运行并生成 HTML 报告:jmeter -n -t test.jmx -l result.jtl -e -o report
- 建议将 JMX、JTL、报告目录分路径管理,避免日志与报告相互覆盖;报告生成需安装 jmeter-plugins-cmd 插件(通过插件管理器安装)。
三 关键配置优化
- 精简结果输出(降低 I/O 与磁盘占用)
- jmeter.save.saveservice.output_format=csv
- jmeter.save.saveservice.response_data=false
- jmeter.save.saveservice.requestHeaders=false
- jmeter.save.saveservice.assertion_results_failure_message=false
- HTTP 客户端与超时(提升吞吐与稳定性)
- httpclient4.time_to_live=60000
- httpclient4.retrycount=1
- httpclient4.max_total=200
- httpclient4.default.max_per_route=20
- httpclient.timeout=5000
- httprequest.connect_timeout=60000
- 控制台与日志
- summariser.interval=10(更频繁查看进度)
- log_level.jmeter=INFO
- JVM 堆与 GC(避免 OOM、降低停顿)
- 编辑 jmeter 启动脚本中的 HEAP:HEAP=“-Xms2g -Xmx4g”
- 增加垃圾回收:添加 -XX:+UseG1GC
- 无头环境可加:-Djava.awt.headless=true
- 监听器选择
- 压测时避免 View Results Tree 等高开销监听器,优先 Aggregate Report / Summary Report。
四 监控与诊断
- 被压测服务器资源监控(ServerAgent + PerfMon)
- 在被测机部署 ServerAgent,默认端口 4444,可自定义:./startAgent.sh --tcp-port 5678 --udp-port 6789
- 如启用防火墙需放行端口:sudo ufw allow 4444
- 在 JMeter 中通过 jp@gc - PerfMon Metrics Collector 添加监控项(CPU、Memory、Disk I/O、Network I/O 等),配置 Host/IP 与 Port 即可采集。
五 分布式压测与常见问题
- 分布式要点
- 主从机 Java/JMeter 版本尽量一致,避免兼容性问题
- 生成 RMI 密钥:在 master 执行 create-rmi-keystore.sh,将 rmi_keystore.jks 分发到所有 slave 的 JMETER_HOME/bin
- slave 配置:jmeter.properties 中设置 server.rmi.ssl.disable=true;jmeter-server 启动参数指定 -Djava.rmi.server.hostname=从机IP
- master 配置:remote_hosts=ip1:port,ip2:port;执行命令示例:jmeter -n -t test.jmx -R ip1,ip2 -l result.jtl -e -o report
- 常见问题速解
- “Server failed to start: localhost is a loopback address”:在 slave 的 jmeter-server 启动命令中添加 -Djava.rmi.server.hostname=实际IP
- 端口与防火墙:确保 4444(ServerAgent)、1099(RMI)等端口在防火墙放行
- 内存不足:按第三节调大 HEAP,并控制结果保存字段,避免 OOM 与磁盘抖动。