Jmeter PerfMon Metrics Collector插件“Agent is unreachable via TCP”异常

64 阅读2分钟

环境

  • JMeter 5.5
  • Jdk11
  • 压测服务器(VPN连接远程服务器)
  • 压力机(本地windows机器)
  • ServerAgent-2.2.1
  • jmeter-plugins-perfmon-2.1

问题描述

使用 jp@gc – PerfMon Metrics Collector 连接远程 ServerAgent 时,尽管通过 VPN 下的 telnet 192.168.10.111 4444Test-NetConnection 显示 TCP 通道可达,但 JMeter 的jp@gc - PerfMon Metrics Collector一直报错“Agent is unreachable via TCP”。经过本地回环测试确认插件与 Agent 版本、Java 环境、JAR 放置路径均无问题,最终发现是 VPN/虚拟网卡 在拦截或假应答了 4444 端口,导致流量并未真正到达 ServerAgent。


解决步骤

  1. 本地回环验证

    • 在本机启动 ServerAgent(或 CMDRunner)并切换到 Java 8 环境(用Java11时, ServerAgent启动异常),确认 sigar 本地库无崩溃。
    • 在 JMeter 本地将 Server Host 填 127.0.0.1:4444,用 Test Connection 验证本地链路通畅。
  2. 诊断 VPN 隧道外网络

    • 在不指定源网卡的情况下,Windows 的 Test-NetConnectiontelnet 被 VPN 虚拟网卡假应答,不具参考价值。
    • 使用 -SourceAddress 参数、PortQry 或断开 VPN 后,再次验证直连 192.168.10.111:4444,确认网络到底是否真正打通。
  3. 搭建 SSH 本地端口转发

    • 在 Windows 上以管理员身份打开终端,执行:

      ssh -N -L 14444:127.0.0.1:4444 root@192.168.10.111
      

      本地监听 14444,转发到远端 4444。

    • 在 JMeter 中将 Server Host 设置为 localhost:14444,此时 Test Connection 成功,PerfMon 开始正常采集远程指标。


经验与收获

  • Jdk版本

    • ServerAgent.jar启动时如果异常检查Jdk版本。
  • 本地回环测试的重要性

    • 先在本地回环(127.0.0.1)验证 Agent 与插件链路是否可用,再排除网络层因素。
  • 网络工具的盲点

    • Windows 默认的 Test-NetConnectiontelnet,在有 VPN/代理干预时,会返回 假可达。要使用更底层或指定源地址的工具(PortQry、nmap、-SourceAddress 参数)才能得出真实结论。
  • SSH 隧道原理

    • SSH 隧道能把被拦截的端口流量包裹在允许的 SSH(22)通道里,常用于穿透防火墙、VPN 或内网穿透。