Ubuntu 上 JMeter 常见问题与排查清单
一 安装与 Java 版本不兼容
- 现象:启动报错或提示类似“This version of the Java Runtime only recognizes class file”,或 JMeter 无法启动。
- 原因:JMeter 版本与 Java 主版本不匹配(如使用过新的 Java 运行老版本 JMeter,或相反)。
- 排查与修复:
- 查看版本:java -version、jmeter -v。
- 对照所用 JMeter 发行说明选择兼容的 Java 8/11/17;必要时安装合适版本(如 sudo apt install openjdk-11-jdk)。
- 正确设置 JAVA_HOME 与 PATH,确保命令行使用的是期望的 Java。示例:
- export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
- export PATH=$JAVA_HOME/bin:$PATH
- 重新启动 JMeter 验证。
二 命令行运行与结果查看
- 非 GUI 执行(推荐压测时使用):
- 命令模板:jmeter -n -t your.jmx -j run.log -l result.jtl -e -o report
- 说明:-n 非 GUI、-t 脚本、-j 日志、-l 结果文件(JTL/CSV)、-e 生成报告、-o 报告输出目录(必须为空)。
- 查看结果:
- 将 result.jtl 拷贝到本地,在 JMeter GUI 中通过“聚合报告”“查看结果树”等监听器打开分析。
三 分布式压测连接与主机名问题
- 常见报错与处理:
- “Cannot start. ubuntu is a loopback address”:在 jmeter-server 启动前设置本机非回环地址,例如:
- 命令行:./jmeter-server -Djava.rmi.server.hostname=你的服务器IP
- 或在 jmeter-server 脚本中设置 RMI_HOST_DEF=-Djava.rmi.server.hostname=你的服务器IP
- “rmi_keystore.jks not found”:在 jmeter.properties 中将 server.rmi.ssl.disable 设为 true(测试环境常用,生产请评估安全性)。
- Master 卡在 “Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445”:多为 RMI 通信地址解析错误。在 system.properties 显式设置 java.rmi.server.hostname=Master实际IP,确保 Slave 能回连;同时核对 Slave 的 remote_hosts 配置为 Master IP:端口。
四 系统资源与网络瓶颈
- 端口与连接耗尽:
- 现象:出现 “java.net.NoRouteToHostException”“Cannot assign requested address” 或大量 TIME_WAIT。
- 优化建议(/etc/sysctl.conf):
- net.ipv4.ip_local_port_range = 1024 65535
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_fin_timeout = 15~30
- 视情况调整 net.ipv4.tcp_max_tw_buckets
- 使配置生效:sysctl -p
- 文件句柄限制:
- /etc/security/limits.conf 增加:
- 重启 sshd 或重新登录会话后生效(ulimit -n 验证)。
- 内存与线程不足:
- 现象:OutOfMemoryError、unable to create new native thread。
- 处理思路:
- 合理设置堆大小(-Xms/-Xmx),避免盲目增大;必要时降低并发线程数。
- 适度减小线程栈(-Xss),如从默认 1M 调至 256k~512k(视脚本与依赖而定)。
- 检查系统 swap 是否充足;确认运行在 64 位 Java + 64 位 OS。
- 排查容器/虚拟机内存限制与 cgroup 配额。
五 插件与依赖缺失
- 现象:运行含 WebSocket 等扩展的脚本时报 NoClassDefFoundError(如缺少 jetty-util、websocket-client 等)。
- 处理:
- 使用 JMeter Plugins Manager 安装对应插件及其依赖,或手动将依赖 JAR 放入 JMETER_HOME/lib/ext。
- 注意依赖版本要与 JMeter 版本匹配,避免混用不同大版本的依赖包。