JMeter + ServerAgent 压测监控实践

前言

在性能测试中很多人只关注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。官方下载地址:

JMeter Plugins 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

优点:

  • 监控更稳定
  • 指标更全面
  • 支持长期保存
  • 支持历史趋势分析
  • 支持告警
  • 更适合集群环境
相关推荐
查拉图斯特拉面条1 天前
JMeter 实战技巧:JSON 数组筛选指定对象并剔除首尾大括号
jmeter·json
查拉图斯特拉面条1 天前
JMeter 实战:JSON 响应中文节点 + 数值精准断言(附真实接口案例)
jmeter·json
qq_4924484463 天前
Jmeter Transaction Controller(事务控制器) 的 TPS(每秒事务数)严格固定为 1
java·开发语言·jmeter
Rookie_hh4 天前
使用Jmeter进行性能测试
jmeter
qq_452396236 天前
第十四篇:《JMeter插件扩展:自定义函数与第三方插件》
开发语言·python·jmeter
qq_452396236 天前
第十三篇:《分布式压测:JMeter Master-Slave集群》
分布式·jmeter
qq_452396237 天前
第十一篇:《性能压测基础:JMeter线程模型与压测策略设计》
java·开发语言·jmeter
沫沫-小白7 天前
JMeter 上传固定文件时,如何修改 Content-Disposition 的 filename
jmeter
qq_452396238 天前
第六篇:《JMeter逻辑控制器:循环、条件和交替执行》
android·java·jmeter