19
10
月
2026
"能扛多少并发"不该是猜的。一次半小时的压测,能提前暴露 CPU 瓶颈、内存泄漏、连接数上限——也能让你在促销/活动前从容扩容。这篇讲工具、方法和容量规划公式。性能分析工具见Linux 性能分析三板斧。
一、先搞懂四个指标
压测前必须认识的术语,不然后面的数字都是天书:
| 指标 | 含义 | 为什么重要 |
|---|---|---|
| QPS/TPS | 每秒请求/事务数 | 容量的核心度量 |
| 并发数 | 同时发起的请求数 | 决定连接数、线程、内存压力 |
| RT(响应时间) | 单次请求耗时 | 用户体感的直接来源 |
| P99 延迟 | 99% 的请求都快于这个值 | 比平均值诚实——平均值会掩盖长尾 |
经验基准:网页接口 RT < 200ms 用户无感;P99 > 1s 就开始有投诉。游戏服看 tick 和帧同步稳定性,是另一套标准(见第五节)。
二、工具选型:从轻到重
| 工具 | 特点 | 适合 |
|---|---|---|
| wrk | 轻量、单机多线程、Lua 脚本 | HTTP 接口压测首选 |
| hey | Go 写的 ab 替代,简单 | 快速来一发 |
| ab | 老牌,功能少 | 历史习惯 |
| JMeter | GUI、分布式、全协议 | 正式压测平台 |
| k6 | 现代、JS 脚本、CI 友好 | 工程化团队 |
个人和小团队,wrk 一把梭足够:单核几万 QPS,支持自定义请求头、Body、Lua 脚本。
# 安装(Linux)
apt install wrk # Debian/Ubuntu
# 或下载编译版,支持 Lua 脚本的完整版
# 基础用法:12 线程 400 连接,压 30 秒
wrk -t12 -c400 -d30s https://yourdomain.com/
# 带 POST 和 Lua 脚本(每请求随机参数)
wrk -t8 -c200 -d60s -s post.lua https://yourdomain.com/api/order-- post.lua:随机金额下单,模拟真实写操作
wrk.method = "POST"
wrk.headers["Content-Type"] = "application/json"
wrk.body = string.format('{"item":"A10086","qty":%d}', math.random(1, 5))三、实战:一次完整的压测流程
第 1 步:明确目标
问自己:这次压测要回答什么问题?
- "现在配置能扛多少 QPS?"(基准测试)
- "明天活动预估 500 并发,扛得住吗?"(容量验证)
- "加了 Redis 缓存快了多少?"(优化验证)
没有目标的压测是瞎打。
第 2 步:压测环境
- 别压生产(除非你能接受真实用户受影响)——用一台同配置的机器,或生产低峰期 + 限流保护
- 测试数据要接近真实量级:空数据库的压测结果没有意义
- 监控全程开着(见下)
第 3 步:阶梯加压,别一步到位
# 逐级加压:100 → 300 → 500 → 800 并发,每级 2 分钟
for c in 100 300 500 800; do
echo "=== 并发 $c ==="
wrk -t8 -c$c -d2m --latency https://yourdomain.com/
done第 4 步:看结果,定位瓶颈
# 压测同时,另一个终端盯着系统
top # CPU
free -h # 内存
iostat -xz 1 # 磁盘 IO
ss -s # 连接数
vnstat -l # 带宽读报告的姿势:
Running 2m test @ https://yourdomain.com/
8 threads and 400 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 145.32ms 210.11ms 1.99s 78.35%
Req/Sec 352.18 89.42 1.2k 71.20%
336512 requests in 2.00m, 48.32MB read
Requests/sec: 2804.26- Latency Avg 145ms:平均响应,还行
- Max 1.99s:长尾已经出现,P99 会更差
- Req/Sec 2804:这台配置的实测 QPS 上限
- 结合系统监控:QPS 上不去时,看是 CPU 100%(应用瓶颈)、IO 100%(数据库/磁盘)、还是带宽打满
先崩的组件决定优化方向:
| 瓶颈现象 | 根因 | 优化 |
|---|---|---|
| CPU 100%,QPS 到顶 | 应用计算密集 | 加核 / 优化代码 / 缓存计算结果 |
| 内存耗尽/OOM | 泄漏或并发缓冲 | 修泄漏 / 限流 / 加内存 |
| 磁盘 %util 100% | 数据库 IO / 日志狂写 | 上 SSD / 数据库优化(慢查询)/ 关 debug 日志 |
| 带宽打满 | 大响应体 | CDN / 压缩(图片优化) |
| 连接数耗尽 | 短连接风暴 | 连接池(Redis/MySQL 连接池)/ keep-alive |
第 5 步:得出容量结论
把阶梯数据整理成一张表,就是你的容量基线:
| 并发 | QPS | P99 RT | CPU | 内存 | 结论 |
|---|---|---|---|---|---|
| 100 | 2100 | 45ms | 35% | 40% | 舒适区 |
| 300 | 2600 | 120ms | 65% | 55% | 甜点区 |
| 500 | 2400 | 480ms | 92% | 70% | 拐点,开始劣化 |
| 800 | 1900 | 2.1s | 100% | 85% | 过载 |
这张表就是扩容决策的依据:当前日均并发 150,预估活动峰值 400——甜点区到拐点之间,要么提前扩容,要么加缓存把拐点推后。
四、容量规划:三个实用公式
1. 80% 水位原则
任何资源的日常水位不超过 70–80%,留给突发和余量。CPU 长期 95% 的服务器,一次小高峰就雪崩。
2. 峰值系数法
所需容量 = 日均峰值 × 峰值系数 × 增长余量- 普通业务:峰值系数 1.5(晚高峰是日均的 1.5 倍)
- 游戏服:系数 2–3(周末晚是全周高峰)
- 电商/活动:系数 3–5(大促当天)
游戏服按人数估配置的公式见游戏配置与开服教程总索引。
3. 压测外推法
单机能扛 QPS_1,目标 QPS_2:
需要机器数 ≈ QPS_2 / (QPS_1 × 0.7) # 0.7 = 安全系数,别跑满水平扩展前记得无状态化(session 外置),否则加机器不生效,见高可用架构入门。
五、游戏服压测:另一套逻辑
Web 压测看 QPS,游戏服看的是稳定性和 tick:
- 真实玩家模拟:拉上朋友(或小号)同时在线跑图、打架、交易——没有工具能完全模拟真实游戏行为,人肉压测最靠谱
- 看 tick 率/帧同步:MC 看 TPS(每秒 tick,掉到 20 以下就是卡)、FPS 游戏看 tickrate 稳定性
- 长跑观察:连续 24 小时在线,看内存是否缓涨(泄漏)、存档是否正常
- 配置对照:压完对照配置速查表,人数超了就该升配——游戏服热升级比宕机体面得多
卡顿的在线排查见游戏服卡顿排查。
六、把压测纳入日常
一次性压测会过期(代码在变、数据在涨),健康的做法:
- 重大变更前压一次:新功能上线、大促前、换配置后
- 监控持续做:压测发现的水位线,变成监控告警线(Prometheus)——日常水位触线比压测更早预警
- CI 里跑冒烟压测:每次发布跑 5 分钟轻量压测,性能劣化当天发现,集成方式见CI/CD 指南
- 结果归档:每次压测报告存档,形成性能基线——退步看得见
结语
容量规划的本质是用数据代替猜:一次阶梯压测,一张容量基线表,扩容决策从拍脑袋变成查表。记住两个数——资源的 80% 水位线,和你业务的峰值系数——大部分"突然崩了"都能提前避免。
需要跑压测和生产的服务器,可以看看财富云计算:NAT 型云服务器内存档位全、支持热升级不换机(压测发现不够当场加内存)、SSD 系统盘,价格比独立 IP 机型省一半以上——自用服务、内部系统这类"吃配置不吃公网 IP"的场景,NAT 型刚好对症。
延伸阅读
- Homepage 个人仪表盘:把散落各处的服务收进一个首页
- SSL 证书完全指南:免费证书、自动续期与不过期监控
- 数据备份体系完全手册:从随手拷到 3-2-1,让数据永远丢不了
- AdGuard Home 内网 DNS:全家去广告、防劫持、内网解析一站解决
- Hugo 静态博客搭建:秒开的博客,部署只要一个目录
- 安全应急响应完全手册:服务器被入侵后,按这个流程走
- 游戏服运营完全手册:从开服到停服,把一台服务器运营成百年老店
- Loki 日志体系搭建:轻量级日志聚合,Grafana 里查遍所有服务器

[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-19 回复