第二章 压测环境搭建:从选型到监控,一步都不能少
说实话,压测环境搭建这件事,看着简单,坑却不少。我见过太多团队,压测结果不准,最后发现是环境本身出了问题。今天咱们就把这块掰开揉碎了讲清楚。
2.1 压测机器选型:别让机器拖了后腿
选压测机器,说白了就是选「施压源」。你想想看,如果施压源自己先扛不住了,那测出来的数据还有什么意义?
核心原则:压测机器的性能必须远高于被压服务。
我个人习惯按这个标准来选:
- CPU:至少 8 核以上,推荐 16 核。压测工具(比如 wrk、JMeter)本身会消耗 CPU,尤其是并发高的时候。
- 内存:16GB 起步。如果压测脚本复杂,或者要记录大量日志,32GB 更稳妥。
- 磁盘:SSD 是必须的。机械盘在大量日志写入时,会成为瓶颈。
- 网卡:千兆网卡是底线,万兆更佳。这个后面会细说。
我在项目中遇到过:有一次用一台 4 核 8G 的虚拟机做压测,结果 CPU 先跑满了,压出来的 QPS 只有真实能力的 60%。换了台物理机后,数据直接翻倍。所以,别省那点钱。
2.2 网络带宽评估:别让网线成了瓶颈
网络带宽这事,经常被忽略。但你想啊,压测时数据包在网络上飞来飞去,带宽不够,延迟和丢包就来了。
怎么估算带宽需求?
一个简单的公式:
所需带宽 = 预期 QPS × 平均请求包大小 × 8
举个例子:
- 预期 QPS:10000
- 平均请求包大小:2KB
- 所需带宽 = 10000 × 2KB × 8 = 160Mbps
嗯,这里要注意:这只是单向的。如果响应包也大,还得加上响应带宽。我一般会留 50% 的余量。
避坑指南:我曾经遇到过压测结果忽高忽低,排查了半天,最后发现是交换机端口被限速了。所以,压测前一定要确认网络链路没有 QoS 限制。
2.3 被压服务部署:环境一致性是命门
被压服务的部署,核心就一句话:和生产环境保持一致。
为什么?因为不一致的环境会带来完全不同的性能表现。比如:
- 生产用 Linux,压测用 Windows?不行。
- 生产用 JDK 11,压测用 JDK 8?也不行。
- 生产是 4 核 8G,压测是 2 核 4G?更不行。
我个人习惯的做法是:
- 容器化部署:用 Docker 或 K8s,保证环境完全一致。
- 配置参数:JVM 参数、连接池大小、超时时间,全部和生产对齐。
- 数据量:数据库里的数据量也要和生产接近。数据太少,索引效果不同,结果会偏乐观。
注意:千万不要在压测环境里混入其他服务。我曾经见过有人在压测机器上同时跑了 Jenkins 和压测脚本,结果 Jenkins 构建时 CPU 飙升,压测数据直接废了。
2.4 监控系统搭建:没有监控,压测就是盲人摸象
压测过程中,你必须知道系统在干什么。CPU 高不高?内存够不够?GC 频繁吗?这些信息,全靠监控。
我推荐用 Prometheus + Grafana 这套组合拳。开源、强大、社区活跃。
2.4.1 Prometheus:数据采集层
Prometheus 负责拉取指标数据。它的架构很简单:
- Exporter:暴露指标数据的代理程序。
- Prometheus Server:定时拉取并存储数据。
- Alertmanager:告警管理(可选)。
常用的 Exporter 有:
| Exporter | 监控对象 |
|---|---|
| node_exporter | 服务器基础指标(CPU、内存、磁盘、网络) |
| jmx_exporter | Java 应用(JVM 指标、GC、线程) |
| mysqld_exporter | MySQL 数据库 |
| redis_exporter | Redis 缓存 |
部署命令也很简单:
# 启动 node_exporter
./node_exporter --web.listen-address=:9100
# 启动 Prometheus(配置文件 prometheus.yml 里添加 target)
./prometheus --config.file=prometheus.yml
2.4.2 Grafana:可视化层
Grafana 负责把 Prometheus 里的数据画成图表。我个人习惯的做法是:
- 先导入官方 Dashboard(比如 Node Exporter Full 模板 ID:1860)。
- 再根据压测需求,自定义几个关键面板。
压测时我必看的几个面板:
- CPU 使用率:看有没有打满。
- 内存使用率:看有没有内存泄漏。
- 网络吞吐量:看带宽是否够用。
- GC 次数和耗时:看 JVM 是否健康。
- 请求延迟(P99、P95):看响应时间是否达标。
一个小技巧:压测时,我会把 Grafana 的 Dashboard 投到大屏上。这样整个团队都能实时看到数据变化,发现问题能第一时间响应。
2.5 本章知识体系:一张图看懂
下面这张 SVG 图,把压测环境搭建的核心逻辑串起来了。你可以把它当作检查清单来用。
这张图的核心逻辑是:压测机器、网络、被压服务三者是基础,监控系统是眼睛。缺了任何一个,压测结果都可能失真。
最后说一句:环境搭建花的时间,会在后续排障时十倍百倍地省回来。别急着开压,先把环境搞扎实了。
想要更多资料,联系可可