3. 压测环境搭建:硬件配置、网络拓扑、监控工具部署

说实话,压测环境搭得好不好,直接决定你后面调参能不能拿到真数据。

我刚入行那会儿,拿一台笔记本就敢跑百万并发压测,结果数据全是假的。后来才明白——环境本身就是被测系统的一部分。你想想看,瓶颈到底是 SDK 本身的性能问题,还是网络抖了一下?这锅甩不干净。

3.1 硬件配置:参数不是越大越好,是够用且可控

我先给个常用标配,这是我在几个中型项目里验证过的组合:

角色 CPU 内存 网卡 磁盘 备注
应用服务器 16 核 + 64 GB 万兆 NVMe SSD 运行被测 SDK
压测机 8 核 + 32 GB 千兆/万兆 SSD 即可 运行压测工具
监控服务器 4 核 16 GB 千兆 普通 HDD 部署 Prometheus + Grafana
网络存储 - - 万兆 RAID 10 可选,用于日志持久化
核心原则:被测服务器的硬件资源要比压测机高一个档次。这样你才能确定——瓶颈在 SDK,不在环境。

我记得有一次压测一个图片处理 SDK,应用服务器只配了 4 核 8 G,结果压到一半系统直接 OOM。后来调成 16 核 64 G,同样的压测脚本跑了 3 小时都没崩。

3.2 网络拓扑:两个场景,两种搭法

我习惯把压测场景分成两类:标准测试和极限测试。拓扑不一样。

  • 标准测试拓扑:压测机 → 千兆交换机 → 应用服务器。适合日常回归和参数调优。
  • 极限测试拓扑:压测机 → 万兆直连 → 应用服务器。去掉交换机带来的抖动,专门压 SDK 的吞吐上限。

你可能会问:为什么不全都用万兆直连?因为成本。而且标准测试的场景更贴近真实用户环境——用户走的是公网,中间隔了无数跳。

我的避坑经验:曾经在极限测试时发现网络延迟忽高忽低,排查了一整天,最后发现是压测机和服务器的 MTU 值不匹配。一个设了 1500,另一个设了 9000,碎片重组把性能吃掉了。

3.3 监控工具部署:别等到出问题了才想起看数据

压测过程中,监控是眼睛。没有监控,你就是在盲打。

我一般会部署三层监控:

  1. 系统级:CPU、内存、磁盘 I/O、网络吞吐量。用 Prometheus + node_exporter 搞定。
  2. JVM/进程级:GC 频率、堆内存、线程数。用 JMX Exporter 或 Java Agent 抓。
  3. 应用级:SDK 内部耗时、错误率、热点函数。自定义埋点推给 Prometheus。

下面是监控服务器上的典型部署命令:

# 安装 Prometheus(假设是 Linux x64)
wget https://github.com/prometheus/prometheus/releases/latest/download/prometheus-2.45.0.linux-amd64.tar.gz
tar xvf prometheus-*.tar.gz
cd prometheus-*

# 启动 Prometheus,指定配置文件
./prometheus --config.file=prometheus.yml &

# 安装 Grafana
wget https://dl.grafana.com/oss/release/grafana-9.5.2.linux-amd64.tar.gz
tar xvf grafana-*.tar.gz
cd grafana-*
./bin/grafana-server &

Prometheus 配置文件里需要添加目标端:

# prometheus.yml 片段
scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['192.168.1.10:9100']  # node_exporter 端口
  - job_name: 'sdk_app'
    static_configs:
      - targets: ['192.168.1.20:8080']  # SDK 暴露的指标接口
注意:监控工具本身也会消耗资源。我见过有人在压测机上装全量监控,结果压测工具自己先卡了。监控服务器单独部署,别跟被测或压测机挤在一起。

3.4 完整环境架构图

下面这张图可以帮你快速理解压测环境的整体拓扑和监控数据流:

压测环境拓扑与监控数据流 压测机 8核 / 32G / 千兆 运行 JMeter / wrk 千兆/万兆交换机 MTU 需对齐 应用服务器 16核 / 64G / 万兆 被测 SDK 实例 网络存储 RAID 10 / 万兆 监控服务器 Prometheus + Grafana node_exporter + JMX 数据流说明 1. 压测请求:压测机 → 交换机 → 应用服务器 2. 监控指标:应用服务器/node → Prometheus 图例: 压测机 网络设备 被测服务器 监控系统

3.5 部署顺序与验证清单

我踩过最大的坑就是顺序搞反了——先跑压测才发现监控没接上,数据丢了一堆。

建议按这个顺序来:

  1. 先把监控服务器搭好,Prometheus + Grafana 启动并验证。
  2. 在被测服务器上部署 node_exporter 和 JMX Exporter,确认指标能抓到。
  3. 在被测服务器上启动 SDK 实例,验证应用级指标接口正常。
  4. 配置网络拓扑,做一次 ping + iperf 联调。延迟 <1ms,吞吐达到预期。
  5. 在压测机上安装压测工具,写一个最简单的请求,确认能连通 SDK。
  6. 跑一次 1 分钟短压,观察监控面板数据是否正常更新。
一个小技巧:在 Grafana 上先建好关键指标的仪表盘,比如 CPU 使用率、GC pause 时间、SDK 平均响应时间。压测开始后一眼就能看出问题。

嗯,环境准备好了。接下来你就可以放心地开始压测,然后针对参数慢慢调了。