前言

在性能测试中很多人只关注TPS、QPS、RT、成功率,但这些指标只能说明接口“表现如何”,却无法说明系统“为什么变慢”。例如:CPU 是否打满、内存是否不足、网络是否成为瓶颈、磁盘 IO 是否过高。因此实际项目中除了压测本身通常还需要服务器资源监控。

JMeter + ServerAgent是比较常见的一种轻量级压测监控方案。

一、整体架构

整体流程如下:

JMeter(压测机)
        ↓
PerfMon 插件
        ↓
ServerAgent(被压测服务器)
        ↓
采集服务器资源指标

1. JMeter

负责发压,例如并发请求、TPS、RT、QPS等

2. ServerAgent

负责采集服务器资源数据,例如CPU、Memory、Network I/O和 Disk I/O等

二、ServerAgent 是什么

ServerAgent 是 JMeter Plugins 官方提供的监控代理程序

运行位置:

被压测服务器

作用:

向 JMeter 暴露服务器资源指标

通过ServerAgent,JMeter 才能实时显示:

  • CPU 曲线
  • 内存曲线
  • 网络流量
  • 磁盘 IO

等监控数据。


三、安装 PerfMon 插件

1、安装 JMeter Plugins Manager

首先需要安装 JMeter Plugins Manager

jmeter-plugins-manager-*.jar

并且放入以下目录:

apache-jmeter/lib/ext

2、重启 JMeter

完成后重启 JMeter。然后在 JMeter 顶部菜单中进入:

Options
→
Plugins Manager

在这里插入图片描述

3、下载PerfMon

在插件市场中搜索PerfMon,安装jp@gc - PerfMon Metrics Collector
在这里插入图片描述

4、重启Jmeter

重启成功后,如果出现以下情况则说明安装成功

Test Plan
→
Add
→
Listener

能够看到jp@gc - PerfMon Metrics Collector

在这里插入图片描述


四、安装 ServerAgent

首先下载 ServerAgent。官方下载地址:

JMeter Plugins ServerAgent

下载完成后,将:

ServerAgent-*.zip

上传到被压测服务器。

解压:

unzip ServerAgent-2.2.3.zip

进入目录:

cd ServerAgent-2.2.3

启动 ServerAgent:

./startAgent.sh

正常情况下会看到类似输出:

Binding UDP to 4444
Binding TCP to 4444
JP@GC Agent v2.2.3 started

说明:

ServerAgent 已成功启动,此时ServerAgent 会监听 4444 端口

如果服务器开启了防火墙,还需要放行 4444 端口:

firewall-cmd --permanent --add-port=4444/tcp
firewall-cmd --reload

验证端口是否监听成功:

lsof -i:4444

正常情况下会看到:

TCP *:4444 (LISTEN)

为了避免关闭终端后进程退出,建议后台启动:

nohup ./startAgent.sh > serveragent.log 2>&1 &

查看运行日志:

tail -f serveragent.log

五、在 JMeter 中添加 PerfMon

右键:

Test Plan
→
Add
→
Listener
→
jp@gc - PerfMon Metrics Collector

即可添加监控面板。
在这里插入图片描述


六、PerfMon 配置说明

PerfMon 最核心的是四列配置:

配置项 含义
Host/IP 被压测服务器 IP
Port ServerAgent 端口
Metric to Collect 采集指标
Metric parameter 指标参数

1. Host/IP

填写:

被压测服务器 IP

例如:

172.24.7.50

2. Port

填写:

ServerAgent 监听端口

默认:

4444

3. Metric to Collect

表示:

采集什么指标

常见包括:

  • CPU
  • Memory
  • Network I/O
  • Disks I/O

4. Metric parameter

表示:

指标参数

有些指标:

不需要 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 需要:

填写网卡名

先查看:

ip addr

或者:

cat /proc/net/dev

例如:

eth0

则配置:

配置项
Host/IP 172.24.7.50
Port 4444
Metric Network I/O
Parameter eth0

8. Disk I/O 配置

Disk I/O 需要:

填写磁盘设备名

先查看:

lsblk

或者:

cat /proc/diskstats

例如:

vda

则配置:

配置项
Host/IP 172.24.7.50
Port 4444
Metric Disks I/O
Parameter vda

七、为什么 Network I/O 和 Disk I/O 容易失败

这是很多人第一次使用 PerfMon 时最容易踩的坑。

因为CPU 和 Memory:

属于标准系统指标,Linux 基本都会提供,因此兼容性好

但:

Network I/O、Disk I/O 依赖网卡名称、磁盘名称、虚拟化实现、LVM和云服务器驱动

因此点击启动压测的时候PerfMon Metrics Collector面板经常出现:

waiting for samples

即:

ServerAgent 无法正确读取该指标

为什么虚拟机更容易出现问题

例如:

当前服务器磁盘:

vda

说明:

当前是虚拟磁盘

而不是:

sda

这种实体磁盘。

虚拟化场景下,不同平台KVM、VMware、OpenStack、云服务器等底层实现不同。

因此:

Disk I/O 兼容性问题会更多

八、压测时实时监控

PerfMon 支持:

实时显示服务器资源曲线

包括:

  • CPU
  • Memory
  • Network
  • Disk

不需要等压测结束。如果一直显示:

waiting for samples

通常说明:

  • 参数填写错误
  • 指标不兼容
  • ServerAgent 未启动
  • 防火墙未放行

九、监控数据保存

PerfMon 支持:

将监控数据输出到 CSV

例如:

logs/perfmon.csv

压测结束后:

可以使用:

  • Excel
  • Python
  • Grafana

继续分析。

例如:

  • CPU均值
  • CPU峰值
  • 内存峰值
  • IO波动趋势

十、JMeter + ServerAgent 的局限性

虽然:

JMeter + ServerAgent

部署简单。但本质上:

属于轻量级监控方案

在复杂场景下,例如:

  • Kubernetes
  • 微服务
  • 大规模集群
  • JVM 深度监控

通常会采用:

  • Prometheus
  • Grafana
  • node_exporter
  • JVM Exporter

等专业监控体系。

因为它们在以下方面更稳定、更专业:

  • Disk I/O
  • JVM
  • 数据库
  • Redis
  • 历史趋势分析

十一、总结

1. 小型项目

推荐:

JMeter + ServerAgent

优点:

  • 部署简单
  • 快速上手
  • 适合短期压测

2. 中大型项目

推荐:

JMeter + Prometheus + Grafana

优点:

  • 监控更稳定
  • 指标更全面
  • 支持长期保存
  • 支持历史趋势分析
  • 支持告警
  • 更适合集群环境
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐