温馨提示×

JMeter在CentOS上的日志分析技巧

小樊
39
2025-12-29 13:07:36
栏目: 智能运维

JMeter在CentOS上的日志分析技巧

一 日志体系与采集要点

  • 核心日志位置与用途:JMeter 运行日志位于 ${JMETER_HOME}/bin/jmeter.log,用于定位 Java 异常、端口冲突、脚本语法错误 等问题;压测结果建议始终输出 JTL(CSV/XML),便于事后统计分析。运行命令示例:jmeter -n -t testplan.jmx -l results.jtl。需要更详细的请求/响应信息时,在 user.properties 增加保存项(如 jmeter.save.saveservice.response_data=truejmeter.save.saveservice.samplerData=truejmeter.save.saveservice.requestHeaders=truejmeter.save.services.responseHeaders=truejmeter.save.saveservice.url=truejmeter.save.saveservice.output_format=xml)。日志级别可在 bin/log4j2.xmlRoot level 永久调整,或在运行时通过 -Jlog_level.jmeter=DEBUG 临时提升。为便于拆分错误日志,可用 -j /path/to/jmeter_error.log 指定 JMeter 运行日志输出文件。

二 命令行快速定位与统计

  • 实时查看与关键字过滤:tail -f ${JMETER_HOME}/bin/jmeter.log;结合 grep 过滤错误与关键事件,例如:grep -i "error\|exception" jmeter.loggrep "All thread groups have been started" jmeter.loggrep "Shutdown hook ended" jmeter.log。如需按时间段筛选,可配合 sed/awk 处理时间戳。
  • 关键事件时间线抽取:用 grep 抽取测试起止与关键业务日志,再用 date 转换为时间戳计算时长。例如:start=$(date -d "$(grep 'All thread groups have been started' jmeter.log | head -1 | awk '{print $1,$2}' | cut -d',' -f1)" +%s)end=$(date -d "$(grep 'Shutdown hook ended' jmeter.log | tail -1 | awk '{print $1,$2}' | cut -d',' -f1)" +%s)echo "duration=$((end-start))s"
  • 简易成功率与 QPS 统计:基于自定义业务日志(见第三部分)统计 successFailureMessage 等关键字数量,计算 错误率=失败/请求总数QPS=请求总数/测试时长吞吐量=成功数/成功运行时长。示例:success=$(grep -c "place order success" jmeter.log)failure=$(grep -c "FailureMessage" jmeter.log)requests=$((success+failure))error_rate=$(echo "scale=2; $failure/$requests*100" | bc)qps=$(echo "scale=2; $requests/$duration" | bc)。以上命令可封装为 Shell 脚本,形成一键分析工具。

三 自定义业务日志与精准度量

  • 在采样器下添加 BeanShell 断言 输出结构化业务日志,便于在无 GUI 的 CentOS 环境中快速定位问题并统计业务指标(如 orderId、业务状态码)。示例代码:
    import org.apache.log4j.Logger;
    String result = prev.getResponseDataAsString();
    String code = vars.get("code");
    String orderId = vars.get("orderId");
    if ("0".equals(code)) {
        log.info("place order success, orderId=" + orderId);
    } else {
        Failure = true;
        log.error("FailureMessage: " + result);
    }
    
    运行后可在 jmeter.log(或 -j 指定的错误日志)中检索 successFailureMessage 等关键字,实现业务成功率、错误原因与单号追踪的精确统计。

四 分布式与系统层面排查联动

  • 分布式压测日志与连通性:Master/Slave 版本需一致;在 jmeter.properties 配置 remote_hosts= 指定节点;Slave 启动时绑定本机 IP:RMI_HOST_DEF=-Djava.rmi.server.hostname=<SLAVE_IP> ./jmeter-server;测试环境可临时关闭 SSL:server.rmi.ssl.disable=true;必要时自定义端口(如 server_port=1567)并放行防火墙:firewall-cmd --add-port=1099/tcp --permanent && firewall-cmd --reload。分布式场景下,结合各节点 jmeter.log 与网络可达性排查“卡在 waiting for possible shutdown message”“结果未返回”等问题。
  • 系统日志联动分析:当 JMeter 报 Address already in useConnection refused 或偶发网络异常时,联动查看 CentOS 系统日志journalctl -u firewalld 检查防火墙阻断;journalctl --since "2025-12-29 10:00:00" -f 实时跟踪相关服务日志;必要时检查端口占用 netstat -lnp | grep <端口> 并结合 grep "error" /var/log/messages。高并发短连接压测前,可适当优化系统网络参数(如扩大本地端口范围、开启端口复用、缩短 tcp_fin_timeout),以减少端口耗尽与连接失败对日志的干扰。

0