前言
在性能测试中很多人只关注TPS、QPS、RT、成功率,但这些指标只能说明接口"表现如何",却无法说明系统"为什么变慢"。例如:CPU 是否打满、内存是否不足、网络是否成为瓶颈、磁盘 IO 是否过高。因此实际项目中除了压测本身通常还需要服务器资源监控。
text
JMeter + ServerAgent是比较常见的一种轻量级压测监控方案。
一、整体架构
整体流程如下:
text
JMeter(压测机)
↓
PerfMon 插件
↓
ServerAgent(被压测服务器)
↓
采集服务器资源指标
1. JMeter
text
负责发压,例如并发请求、TPS、RT、QPS等
2. ServerAgent
text
负责采集服务器资源数据,例如CPU、Memory、Network I/O和 Disk I/O等
二、ServerAgent 是什么
text
ServerAgent 是 JMeter Plugins 官方提供的监控代理程序
运行位置:
text
被压测服务器
作用:
text
向 JMeter 暴露服务器资源指标
通过ServerAgent,JMeter 才能实时显示:
- CPU 曲线
- 内存曲线
- 网络流量
- 磁盘 IO
等监控数据。
三、安装 PerfMon 插件
1、安装 JMeter Plugins Manager
首先需要安装 JMeter Plugins Manager
text
jmeter-plugins-manager-*.jar
并且放入以下目录:
text
apache-jmeter/lib/ext
2、重启 JMeter
完成后重启 JMeter。然后在 JMeter 顶部菜单中进入:
text
Options
→
Plugins Manager

3、下载PerfMon
在插件市场中搜索PerfMon,安装jp@gc - PerfMon Metrics Collector

4、重启Jmeter
重启成功后,如果出现以下情况则说明安装成功
text
Test Plan
→
Add
→
Listener
能够看到jp@gc - PerfMon Metrics Collector

四、安装 ServerAgent
首先下载 ServerAgent。官方下载地址:
下载完成后,将:
text
ServerAgent-*.zip
上传到被压测服务器。
解压:
bash
unzip ServerAgent-2.2.3.zip
进入目录:
bash
cd ServerAgent-2.2.3
启动 ServerAgent:
bash
./startAgent.sh
正常情况下会看到类似输出:
text
Binding UDP to 4444
Binding TCP to 4444
JP@GC Agent v2.2.3 started
说明:
text
ServerAgent 已成功启动,此时ServerAgent 会监听 4444 端口
如果服务器开启了防火墙,还需要放行 4444 端口:
bash
firewall-cmd --permanent --add-port=4444/tcp
firewall-cmd --reload
验证端口是否监听成功:
bash
lsof -i:4444
正常情况下会看到:
text
TCP *:4444 (LISTEN)
为了避免关闭终端后进程退出,建议后台启动:
bash
nohup ./startAgent.sh > serveragent.log 2>&1 &
查看运行日志:
bash
tail -f serveragent.log
五、在 JMeter 中添加 PerfMon
右键:
text
Test Plan
→
Add
→
Listener
→
jp@gc - PerfMon Metrics Collector
即可添加监控面板。

六、PerfMon 配置说明
PerfMon 最核心的是四列配置:
| 配置项 | 含义 |
|---|---|
| Host/IP | 被压测服务器 IP |
| Port | ServerAgent 端口 |
| Metric to Collect | 采集指标 |
| Metric parameter | 指标参数 |
1. Host/IP
填写:
text
被压测服务器 IP
例如:
text
172.24.7.50
2. Port
填写:
text
ServerAgent 监听端口
默认:
text
4444
3. Metric to Collect
表示:
text
采集什么指标
常见包括:
- CPU
- Memory
- Network I/O
- Disks I/O
4. Metric parameter
表示:
text
指标参数
有些指标:
text
不需要 parameter
例如:
- CPU
- Memory
但有些指标需要填写:
- 网卡名
- 磁盘名
例如:
- eth0
- vda
5. CPU 监控配置
CPU 配置如下:
| 配置项 | 值 |
|---|---|
| Host/IP | 172.24.7.50 |
| Port | 4444 |
| Metric | CPU |
| Parameter | 留空 |
6. Memory 监控配置
Memory 配置如下:
| 配置项 | 值 |
|---|---|
| Host/IP | 172.24.7.50 |
| Port | 4444 |
| Metric | Memory |
| Parameter | 留空 |
7. Network I/O 配置
Network I/O 需要:
text
填写网卡名
先查看:
bash
ip addr
或者:
bash
cat /proc/net/dev
例如:
text
eth0
则配置:
| 配置项 | 值 |
|---|---|
| Host/IP | 172.24.7.50 |
| Port | 4444 |
| Metric | Network I/O |
| Parameter | eth0 |
8. Disk I/O 配置
Disk I/O 需要:
text
填写磁盘设备名
先查看:
bash
lsblk
或者:
bash
cat /proc/diskstats
例如:
text
vda
则配置:
| 配置项 | 值 |
|---|---|
| Host/IP | 172.24.7.50 |
| Port | 4444 |
| Metric | Disks I/O |
| Parameter | vda |
七、为什么 Network I/O 和 Disk I/O 容易失败
这是很多人第一次使用 PerfMon 时最容易踩的坑。
因为CPU 和 Memory:
text
属于标准系统指标,Linux 基本都会提供,因此兼容性好
但:
text
Network I/O、Disk I/O 依赖网卡名称、磁盘名称、虚拟化实现、LVM和云服务器驱动
因此点击启动压测的时候PerfMon Metrics Collector面板经常出现:
text
waiting for samples
即:
text
ServerAgent 无法正确读取该指标
为什么虚拟机更容易出现问题
例如:
当前服务器磁盘:
text
vda
说明:
text
当前是虚拟磁盘
而不是:
text
sda
这种实体磁盘。
虚拟化场景下,不同平台KVM、VMware、OpenStack、云服务器等底层实现不同。
因此:
text
Disk I/O 兼容性问题会更多
八、压测时实时监控
PerfMon 支持:
text
实时显示服务器资源曲线
包括:
- CPU
- Memory
- Network
- Disk
不需要等压测结束。如果一直显示:
text
waiting for samples
通常说明:
- 参数填写错误
- 指标不兼容
- ServerAgent 未启动
- 防火墙未放行
九、监控数据保存
PerfMon 支持:
text
将监控数据输出到 CSV
例如:
text
logs/perfmon.csv
压测结束后:
可以使用:
- Excel
- Python
- Grafana
继续分析。
例如:
- CPU均值
- CPU峰值
- 内存峰值
- IO波动趋势
十、JMeter + ServerAgent 的局限性
虽然:
text
JMeter + ServerAgent
部署简单。但本质上:
text
属于轻量级监控方案
在复杂场景下,例如:
- Kubernetes
- 微服务
- 大规模集群
- JVM 深度监控
通常会采用:
- Prometheus
- Grafana
- node_exporter
- JVM Exporter
等专业监控体系。
因为它们在以下方面更稳定、更专业:
- Disk I/O
- JVM
- 数据库
- Redis
- 历史趋势分析
十一、总结
1. 小型项目
推荐:
text
JMeter + ServerAgent
优点:
- 部署简单
- 快速上手
- 适合短期压测
2. 中大型项目
推荐:
text
JMeter + Prometheus + Grafana
优点:
- 监控更稳定
- 指标更全面
- 支持长期保存
- 支持历史趋势分析
- 支持告警
- 更适合集群环境