当前位置: 首页 > 测试知识 > JMeter监控Tomcat、Nginx等服务器性能指标(如jmx)
JMeter监控Tomcat、Nginx等服务器性能指标(如jmx)
2026-07-20 作者cwb 浏览次数65

JMeter本身不内置服务器资源监控,要在压力测试中同步采集服务器性能靠三种方式,在.jmx 脚本中一般以独立线程组或监听器实现:

JMX 协议:直接远程采集Java应用服务器(如 Tomcat)的内部标准。

HTTP 状态页:请求Nginx、Apache提供的状态页面,用正则或JSON提取器分析。

PerfMon Server Agent:采集操作系统级标准(CPU、内存、磁盘、网络),适用于所有服务器。


二、根据JMX直连监控Tomcat:


1. 启用 Tomcat远程JMX

编辑Tomcat启动脚本(如 catalina.sh 或 catalina.bat),在首行添加JVM参数:


text

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote"

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=9999"

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false"

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"


重启后,用JConsole连接 service:jmx:rmi:///jndi/rmi://<IP>:9999/jmxrmi 测试。


2. 在 JMeter中通过JMX采集

推荐使用JMeter Plugins中的 PerfMon Metrics Collector监听器。

安装 JMeter Plugins Manager,然后安装 “PerfMon (Servers Performance Monitoring)” 插件。

在线程组或测试计划中添加 jp@gc - PerfMon Metrics Collector。

添加一行:主机填写Tomcat服务器IP,端口 9999,协议选择 JMX。

点击 Metric 列的按钮,输入JMX连接串,可浏览所有MBean,选择需要监控的属性。


常用 Tomcat 性能标准及对应的 MBean 和属性:


堆内存使用情况

MBean:java.lang:type=Memory

属性:HeapMemoryUsage.used、HeapMemoryUsage.max


垃圾回收次数和时间

MBean:java.lang:type=GarbageCollector,name=*(如 PS Scavenge、PS MarkSweep)

属性:CollectionCount、CollectionTime


线程数

MBean:java.lang:type=Threading

属性:ThreadCount、DaemonThreadCount


进程 CPU 负载

MBean:java.lang:type=OperatingSystem

属性:ProcessCpuLoad(需要 Java 8 及以上)


Tomcat 总请求数和错误数

MBean:Catalina:type=GlobalRequestProcessor,name=*

属性:requestCount、errorCount


Tomcat 线程池使用状况

MBean:Catalina:type=ThreadPool,name=*

属性:currentThreadCount、currentThreadsBusy


也可以不用插件,在 JSR223 Sampler 中用Groovy直连JMX获取并记录这些值,灵活但需要编写代码。

三、通过HTTP状态页采集监控Nginx:


1. 开启Nginx stub_status模块

保证 Nginx 编译了 --with-http_stub_status_module,然后在配置中添加:


nginx

location /nginx_status {

    stub_status on;

    access_log off;

    allow 127.0.0.1;   # 根据 JMeter 所在 IP 调整

    deny all;

}


访问后返回类似文本:


text

Active connections: 43 

server accepts handled requests

 1264 1264 3578 

Reading: 0 Writing: 12 Waiting: 31


2. 在 JMeter 中分析并记录

创建一个独立监控线程组,循环请求此 URL,并用正则表达式提取标准。


添加 HTTP 请求取样器,目标URL为 /nginx_status。

添加正则表达式提取器,用来下方式一次性提取多个值:

Active connections:\s+(\d+)\s+[\s\S]*?\s+(\d+)\s+(\d+)\s+(\d+)\s+Reading:\s+(\d+)\s+Writing:\s+(\d+)\s+Waiting:\s+(\d+)

这样可得到变量:ActiveConnections、accepts、handled、requests、Reading、Writing、Waiting。

后续可用BeanShell或JSR223后置处理程序将这些值追加到文件,或者写入InfluxDB再配合Grafana绘图。

如果想直接在 JMeter 监听器中看到 Nginx 标准变化,需要结合外部工具(如 InfluxDB+Grafana),单纯JMeter自身没有内置曲线图表能展示自定义监控数据,但可通过 PerfMon Metrics Collector 配合自己开发的简单agent来中转。


四、通用系统资源监控:PerfMon Server Agent

对于 Tomcat 或 Nginx 所在机器的 CPU、内存、磁盘、网络,使用JMeter Plugins的Server Agent最方便。

在目的服务器下载并运行 ServerAgent(默认端口 4444)。

JMeter 中添加 jp@gc - PerfMon Metrics Collector,协议选 TCP,端口 4444,添加 CPU、Memory、Disk I/O 等标准即可。

这些标准会和 JMX 监控数据出现在同一张图表中,方便关联分析。


五、在.jmx脚本中

一个完整的性能测试计划一般包含三个部分:

工作负载线程组:模拟真实用户操作,包含业务请求。

监控线程组(独立运行,循环或按定时器间隔执行):

针对 Tomcat 的 PerfMon Metrics Collector(JMX 协议)。

针对 Nginx 的 HTTP 请求 + 正则提取器,并可将结果输出到外部存储。

针对系统资源的 PerfMon Metrics Collector(TCP 协议)。

setUp / tearDown 线程组:初始化和清理数据。

所有监控数据在测试过程中实时更新到监听器图表,测试完成后可导出CSV详细分析。


六、注意事项

JMX 安全:生产环境必须启用密码认证和 SSL,测试环境可以暂时关闭。

端口和防火墙:保证 JMX 端口(如 9999)、ServerAgent 端口(4444)、Nginx 状态端口已放通。

采集间隔:监控采样间隔建议 1~5 秒,太短会增加被测系统负担,干扰性能结果。

Nginx Plus版提供更丰富的JSON状态接口,此时可直接用HTTP请求 + JSON提取器,无需复杂的正则。


文章标签: 软件测试 测试工具
咨询软件测试