温馨提示×

jmeter在centos的运行问题

小樊
45
2025-11-16 04:21:59
栏目: 智能运维

CentOS 上运行 JMeter 的实用指南与常见问题排查

一 快速安装与运行

  • 安装 Java 8(JMeter 5.x 建议使用 Java 8 或 11):sudo yum install -y java-1.8.0-openjdk-devel;验证:java -version。
  • 下载并解压 Apache JMeter(示例版本 5.4.3):
    wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.4.3.tgz
    tar -xzf apache-jmeter-5.4.3.tgz -C /opt/
    ln -sfn /opt/apache-jmeter-5.4.3 /opt/jmeter
  • /opt/jmeter/bin 加入 PATH,便于直接执行 jmeter。
  • 非 GUI 模式执行压测:
    jmeter -n -t /path/to/testplan.jmx -l /path/to/results.jtl
  • 稳定性建议:压测尽量使用 非 GUI 模式,减少资源占用与结果偏差。

二 常见报错与快速修复

  • Java 版本不兼容或环境变量异常:JMeter 5.x 建议使用 Java 8/11;检查 JAVA_HOME、PATH 是否正确,必要时重装或切换版本。
  • 权限被拒绝:对 JMeter 目录执行 chmod -R 755 授权,避免因权限不足导致脚本或 RMI 失败。
  • 分布式压测连接失败或卡住:
    • 关闭防火墙或放行端口:firewall-cmd --state;systemctl stop firewalld(测试环境)。
    • 双网卡/多网卡导致 RMI 绑定错误:在 jmeter-server 启动前设置本机 IP:RMI_HOST_DEF=-Djava.rmi.server.hostname=SLAVE_IP;在 Master 的 jmeter.properties 设置 remote_hosts=SLAVE_IP:1099
    • 禁用 SSL(测试环境):jmeter.properties 中设置 server.rmi.ssl.disable=true
    • 自定义端口:server_port=1567(默认 1099)。
  • 卡在 “waiting for possible shutdown message”:多为 HTTP 请求未设超时,给 HTTP Request Defaults 设置 ConnectResponse 超时(如 10000 ms),并尽量升级到较新版本。
  • 内存不足 OOM:编辑 jmeterjmeter.sh,通过 JVM_ARGS 调整堆内存,例如:JVM_ARGS=“-Xms8g -Xmx12g”。

三 性能与稳定性优化

  • 系统网络参数(应对高并发短连接):
    • 扩大本地端口范围:net.ipv4.ip_local_port_range = 1024 65535
    • 开启端口复用:net.ipv4.tcp_tw_reuse = 1
    • 降低 TIME_WAIT 回收时间:net.ipv4.tcp_fin_timeout = 15~30
    • 可选:net.ipv4.tcp_tw_recycle = 1(NAT/云环境慎用)
    • 调整 TIME_WAIT 桶数量:net.ipv4.tcp_max_tw_buckets = 55000
      修改后执行 sysctl -p 生效。
  • 文件句柄限制(避免 “too many open files”):
    /etc/security/limits.conf 增加:
    • soft nofile 65535
    • hard nofile 65535
    • soft nproc 65535
    • hard nproc 65535
      重启 sshd 或执行 ulimit -n 65535 并写入 /etc/profile 使其持久。
  • JMeter 自身:压测使用 非 GUI 模式;按需精简监听器,避免额外内存与 I/O 开销。

四 日志与结果分析

  • 定位问题的首要位置:JMeter 安装目录 bin/jmeter.log;如需永久调整日志级别,修改 bin/log4j2.xml 中的 Root level。
  • 命令行运行建议始终输出 JTL 结果文件,便于事后分析。
  • 需要更详细的请求/响应信息用于排查时,可在 user.properties 增加:
    jmeter.save.saveservice.output_format=xml
    jmeter.save.saveservice.response_data=true
    jmeter.save.saveservice.samplerData=true
    jmeter.save.saveservice.requestHeaders=true
    jmeter.save.saveservice.url=true
    jmeter.save.saveservice.responseHeaders=true
  • 自定义业务日志(无界面压测尤为有效):在 BeanShell 断言中使用
    import org.apache.log4j.Logger;
    String result = prev.getResponseDataAsString();
    if (!“0”.equals(vars.get(“code”))) {
    Failure = true;
    log.error(“业务失败,响应=” + result);
    } else {
    log.info(“业务成功,orderId=” + vars.get(“orderId”));
    }
    结合 jmeter.log 可快速统计成功率、错误率、QPS/吞吐等关键指标。

五 分布式压测快速配置

  • 环境:准备 1 台 Master1~N 台 Slave(CentOS),各节点安装相同版本 JMeter 与 Java 8/11
  • Slave 节点:
    • 编辑 bin/jmeter.properties:server.rmi.ssl.disable=true(测试环境);如需自定义端口,设置 server_port=1567
    • 启动:在 Slave 上执行 RMI_HOST_DEF=-Djava.rmi.server.hostname=SLAVE_IP ./jmeter-server。
  • Master 节点:
    • 编辑 bin/jmeter.properties:remote_hosts=SLAVE1_IP:1099,SLAVE2_IP:1099
    • 启动压测:jmeter -n -t testplan.jmx -R SLAVE1_IP:1099,SLAVE2_IP:1099 -l result.jtl
  • 网络与安全:确保 Master 与所有 Slave 之间 1099(及自定义端口)可达,必要时关闭防火墙或配置安全组放行。

0