PerfMon(Server Performance Monitoring)是JMeter生态中最常用的服务器资源监控插件。通过在目的服务器上部署Agent代理,实时采集CPU、内存、磁盘I/O、网络I/O等标准和JMeter的压测结果在时间线上准确关联能帮助快速定位性能短板。
一、整体架构
PerfMon方案由两个组件组成,采用标准的客户端‑服务器(C/S)方式:
PerfMon Metrics Collector(插件) – 部署在JMeter客户端一侧,负责向服务器端发起数据请求,接收返回的标准数据并在JMeter界面上实时绘制监控图表。
ServerAgent(代理) – 部署在被测服务器上,是一个Java程序,负责采集本机的CPU、内存、磁盘I/O、网络I/O等资源使用情况,并通过网络(默认TCP/UDP 4444端口)回传给JMeter端。
只安装JMeter插件而不在服务器端部署并启动Agent,将无法获取任何监控数据,二者缺一不可。
二、环境准备
在开始安装之前保证满足条件:
JMeter端(客户端)
已安装Java 8或更高版本。
已安装JMeter,建议使用3.x及以上版本。
被测服务器端(目标机器)
已安装Java环境(因为ServerAgent是Java应用)。
防火墙需要放行Agent所监听的端口(默认是4444),保证JMeter客户端能够访问该端口。
三、JMeter端安装PerfMon插件
推荐通过Plugins Manager在线安装,如网络受限也可手动部署。
方式一:通过Plugins Manager安装
先下载JMeter Plugins Manager:
访问官网 https://jmeter-plugins.org/get/ ,下载 jmeter-plugins-manager-*.jar 文件。
将该jar包复制到 JMETER_HOME/lib/ext 目录下。
重启JMeter。
打开JMeter后,点击顶部菜单栏的 选项-Plugins Manager。
在弹出的窗口中切换到 Available Plugins(可用插件)标签页。
在搜索框中输入 PerfMon,从结果中勾选 PerfMon (Servers Performance Monitoring)。
点击右下角的 Apply Changes and Restart JMeter,等待插件下载安装完成,JMeter会自动重启。
测试安装是不是成功:
重启后,在任意测试计划上右键-添加-监听器,如果能看到 jp@gc - PerfMon Metrics Collector 选项,则表示安装成功。
方式二:适用于离线环境的手动安装
从JMeterPlugins官网下载 JMeterPlugins-Standard.jar 和 JMeterPlugins-Extras.jar 两个文件。
将这两个jar包复制到 JMETER_HOME/lib/ext 目录下。
重启JMeter即可生效。
四、被测服务器端部署ServerAgent
1.下载和解压
从JMeter插件官网的下载页面(https://jmeter-plugins.org/downloads/all/#server-agent)获取 ServerAgent-2.2.3.zip(或更新版本)。
将压缩包上传到被测服务器,如放到 /opt 目录下,然后解压:
bash
unzip ServerAgent-2.2.3.zip
cd ServerAgent-2.2.3
2.启动Agent
Linux / Unix 系统:
先给启动脚本添加执行权限:chmod +x startAgent.sh
直接启动(默认端口4444):./startAgent.sh
如果希望后台运行并记录日志,可使用:nohup ./startAgent.sh > serveragent.log 2>&1 &
Windows 系统:
直接双击运行 ServerAgent.bat 即可。
自定义端口(如需修改默认端口):
bash
./startAgent.sh --tcp-port 9003 --udp-port 9003
# 或者直接用java命令
java -jar ServerAgent.jar --tcp-port 7777 --udp-port 7777
如果修改了端口,后续在JMeter监听器中也要对应设置相同的端口号。
3.测试Agent是不是启动成功
启动成功后,控制台会输出日志:
Binding UDP to 4444
Binding TCP to 4444
JP@GC Agent v2.2.3 started
同时可以用来下命令检查端口是不是处于监听状态:
bash
netstat -tulnp | grep 4444
# 或
lsof -i:4444
4.防火墙配置
如果服务器开启了防火墙,必须放行Agent监听的端口(以默认4444为例):
使用 firewalld(CentOS 7+):
bash
firewall-cmd --add-port=4444/tcp --permanent
firewall-cmd --reload
使用 iptables:
bash
iptables -I INPUT -p tcp --dport 4444 -j ACCEPT
使用 ufw(Ubuntu):
bash
sudo ufw allow 4444/tcp
五、JMeter端配置PerfMon监听器
1.添加监听器
在JMeter的测试计划中,右键点击 测试计划(或某个具体的线程组),选择 添加-监听器-jp@gc - PerfMon Metrics Collector。
2.配置监控目的和标准
在PerfMon监听器界面中,点击Add Row(添加行)来新增一个监控目的。每一行需要填写以下内容:
Host/IP:被测服务器的IP地址或主机名,如 192.168.1.100。
Port:ServerAgent监听的端口号,默认是 4444,如果Agent启动时修改了端口,此处必须保持一致。
Metric to Collect:选择要监控的资源类型,每次只能选一种。常用选项包括:
CPU(总体CPU使用率)
Memory(内存使用情况,如已用百分比、空闲百分比)
Disks I/O(磁盘读写相关标准)
Network I/O(网络收发流量)
Metric Parameter(可选参数):某些标准支持进一步细化,如可以指定具体的磁盘分区(如 /dev/sda)或网络接口(如 eth0)。不填则默认监控总体。
因为每一行只能监控一种标准,如果要同时监控CPU、内存、磁盘I/O和网络I/O四项,则需要分别添加四行,每行选择不同的Metric类型。
3.常用监控标准
CPU:显示总体CPU使用率(百分比)。也可通过参数指定监控某个具体重要或某个进程的CPU占用。
Memory:提供多种子标准,如 usedperc(已用百分比)、freeperc(空闲百分比)以及绝对数值(如 used、free)。一般使用 usedperc 和 freeperc 即可直观看出内存压力。
Disks I/O:包含多个计数器,如 queue(磁盘请求队列长度)、reads/writes(每秒读/写次数)、readbytes/writebytes(每秒读写字节数)。队列长度或读写次数过高一般表示磁盘存在短板。
Network I/O:监控网络接口的流量,包括入站(in)和出站(out)的速率(字节/秒),可以判断网络带宽是不是成为短板。
4.其他设置选项
Interval(采样间隔):默认1秒,可根据需要调整,但间隔越短数据越精细,同时也会增加Agent和JMeter的资源消耗。
勾选use relative times:图表的X轴将从0开始显示相对时间,便于观察从测试开始后的变化。
勾选Auto-zoom rows for best fit:自动缩放各个标准的Y轴范围,使曲线更易观察。
还可以限制采样点数量或固定Y轴的最大值,便于对比不同测试的结果。
六、测试执行和结果查看
1.运行测试
保证测试计划中已经添加了线程组、HTTP请求等业务思路元件。
点击JMeter工具栏的绿色启动按钮,开始执行压测。
此时PerfMon Metrics Collector会实时绘制服务器各项资源的变化曲线,随着测试推进,图表会动态更新。
2.结果分析和数据导出
实时图表:在GUI方式下,可以直接观察CPU、内存等标准的趋势,注意曲线是不是有突增、不断高位或异常波动。
数据导出:如果希望保存原始数据以便后续分析,可以在PerfMon监听器界面勾选“Save Table Data”,测试结束后数据会保存到CSV文件。也可以在图表界面点击Load CSV加载历史数据进行复盘。
多标准同图展示:当同一监听器中添加了多行(如CPU和内存),图表上会出现多条曲线。为了便于观察,CPU和内存的数值默认会放大10倍(显示为“x10”),从而让不同量级的标准能在同一坐标系中清晰对比。
3.命令行生成报告
如果使用非GUI方式执行测试,并希望事后生成PerfMon图表,可以借助JMeterPluginsCMD工具。大致步骤:
在测试计划中配置好PerfMon监听器,并指定结果文件(如 perfmon.jtl)。
使用命令行运行测试:jmeter -n -t plan.jmx -l result.jtl
再使用JMeterPluginsCMD生成PNG图片:
bash
JMeterPluginsCMD.bat --generate-png perfmon.png --input-jtl perfmon.jtl --plugin-type PerfMon
七、常见问题
1.Connection refused / 无法连接服务器
可能原因:ServerAgent未启动、端口被占用、防火墙拦截、IP地址填写错误。
解决步骤:
在服务器上确定Agent进程存在:ps -ef | grep ServerAgent。
确定端口监听:netstat -tulnp | grep 4444。
在JMeter所在机器上测试网络连通性,如使用 nc -vz 服务器IP 4444 或 telnet 服务器IP 4444,看是不是能够建立TCP连接。
临时关闭防火墙或添加放行规则,排除防火墙拦截。
2.No metrics collected / 没有数据采集到
可能原因:ServerAgent版本和JMeter插件不兼容,或者Agent启动时使用了不同的端口但监听器未修改。
解决方法:更新ServerAgent到最新版本;检查监听器中的端口设置是不是和Agent启动时的端口一致。
3.端口被占用
如果默认的4444端口已被其他程序占用,可在启动Agent时更换端口(如 --tcp-port 9003 --udp-port 9003),同时在JMeter监听器的Port字段填写新端口。
4.长时间运行占用资源过多
建议:
在非必要情况下,尽量使用命令行非GUI方式执行压测(jmeter -n -t plan.jmx -l result.jtl),GUI仅用于调试脚本和查看图表。
如果监控的标准很多(例就像时监控多个磁盘分区或网卡),可以适当增加ServerAgent的堆内存,如启动时使用:
bash
java -Xms512m -Xmx1024m -jar ./CMDRunner.jar --tool PerfMonAgent --port 4444
5.标准不全或粒度不够
请确定已为每种需要监控的资源类型分别添加了一行(CPU、Memory、Disks I/O、Network I/O各一行)。
如果希望更精细的监控(比如按进程或按具体磁盘分区),请在Metric Parameter中填入相应参数。
对于更长时间、更丰富的可视化需求,可考虑采用下文提到的InfluxDB + Grafana方案。
八、InfluxDB + Grafana可视化
PerfMon自带的图表适合快速查看实时数据,但如果需要长期存储监控数据、查看历史趋势、制作炫酷看板或和团队共享,推荐集成InfluxDB和Grafana。
InfluxDB:作为时序数据库,用于存储PerfMon采集到的各项标准数据。
Grafana:作为可视化面板,连接InfluxDB数据源,创建漂亮的实时监控仪表盘。
基本流程:
在服务器或独立机器上部署InfluxDB,并创建数据库。
部署Grafana,启动后默认访问端口为3000。
在JMeter的测试计划中添加 Backend Listener,选择实现类为 InfluxdbBackendListenerClient,并配置InfluxDB的URL、数据库名等参数。
在Grafana中添加InfluxDB数据源,然后导入官方或社区提供的JMeter监控面板模板,即可看到实时更新的资源曲线。
这种组合方案特别适合不断集成、压力测试平台以及需要多人监控的情形。
PerfMon插件的完整应用流程可以归纳为:
JMeter端 – 安装Plugins Manager,通过它在线安装PerfMon插件;或在离线环境下手动复制jar包。
服务器端 – 下载ServerAgent压缩包,解压并启动Agent(默认端口4444),同时保证防火墙放行该端口。
配置监听器 – 在测试计划中添加 jp@gc - PerfMon Metrics Collector,填写目的服务器IP、端口,并为每类资源(CPU、内存、磁盘I/O、网络I/O)分别添加一行监控。
执行和分析 – 运行压测,观察实时图表,必要时导出数据或生成报告。
借助PerfMon将服务器资源消耗和业务请求响应时间等压测结果精确关联,从而快速识别CPU过载、内存泄漏、磁盘I/O短板或网络带宽不足等问题,为性能调优提供可靠的数据支撑。