服务器如何评估服务器并发承载能力
学完这篇你能按一套可复用的流程,用 ab/wrk 给服务器做阶梯加压,并借助系统命令和云监控找到并发拐点,最终估算出安全并发数。
第一步:先定清楚要测哪些指标
这一步要明确“并发承载能力”不等于一个数字,而是几个指标的组合;定完指标,后面压测才知道该记录什么。至少要记录:并发连接数、QPS(每秒请求数)、P95/P99 响应时间、错误率、CPU/内存/磁盘 IO/网络带宽。示例目标:单台 4 核 8G 服务器,期望支撑 500 并发,P95 小于 200ms,错误率小于 0.1%。
注意:不要只看 QPS。QPS 很高但 P99 超过 2 秒,线上用户照样会骂。
第二步:准备一台和线上同规格的测试机
这一步要拿到一台配置、系统、中间件版本和线上接近的机器,并打开文件句柄限制;做完后压测结果才有参考价值。以阿里云为例:登录阿里云控制台,进入“云服务器 ECS” -> “实例与镜像” -> “实例” -> “创建实例”,规格选 ecs.g6.xlarge(4 核 16G),镜像选 Alibaba Cloud Linux 3.2104 LTS 64 位。登录后执行:
ulimit -n 65535
echo '* soft nofile 65535' >> /etc/security/limits.conf
echo '* hard nofile 65535' >> /etc/security/limits.conf
安装压测工具:yum install -y httpd-tools 会装 ab;wrk 可源码安装:yum install -y git gcc make,git clone https://github.com/wg/wrk.git,cd wrk && make && cp wrk /usr/local/bin/。
注意:压测机和被测机不要用同一台,否则 CPU、带宽会互相抢,测出来的是压测机先崩。
第三步:部署一个可重复的被测服务
这一步要有一个稳定、可重复的接口,避免每次测的内容不一样。先用 Nginx 静态文件做基准:
yum install -y nginx
systemctl start nginx
systemctl enable nginx
dd if=/dev/zero of=/usr/share/nginx/html/1k.bin bs=1024 count=1
curl http://127.0.0.1/1k.bin -o /dev/null -s -w "%{http_code} %{time_total}\n"
如果测动态接口,再把 Nginx 换成 Spring Boot 或 Python Flask,但基准测试建议先做静态,排除业务逻辑干扰。
第四步:用 ab 或 wrk 做阶梯加压
这一步要从低并发开始,逐级翻倍,记录每一级的 QPS、延迟和错误率;做完后能找到性能拐点。ab 示例:
ab -n 10000 -c 100 http://127.0.0.1/1k.bin
参数 -n 是总请求数,-c 是并发数。wrk 更适合高并发:
wrk -t4 -c200 -d30s --latency http://127.0.0.1/1k.bin
参数 -t4 是 4 个线程,-c200 是 200 个连接,-d30s 压 30 秒,--latency 输出延迟分布。建议按 50、100、200、400、800 并发逐级测试,每级记录:Requests/sec、P95、P99、Socket errors、Non-2xx responses。
注意:ab 对长连接和 HTTP/2 支持较弱,高并发优先用 wrk;ab 的
-n要足够大,否则统计波动大。
第五步:同步监控服务器资源
这一步要在压测同时看被测机的资源曲线,判断瓶颈在 CPU、内存、磁盘还是网络。命令行执行:
top
vmstat 1
iostat -x 1
sar -n DEV 1
云监控路径:阿里云控制台 -> 云监控 -> 主机监控 -> 实例列表 -> 目标实例 -> 监控图表,重点看 CPU 使用率、内存使用率、网络带宽、磁盘 IOPS。经验阈值:CPU 持续大于 80%、可用内存小于 10%、带宽打满、磁盘 await 大于 50ms,通常就是瓶颈信号。
注意:先确认是压测机瓶颈还是被测机瓶颈。如果压测机 CPU 也满了,结果不可信。
第六步:找到拐点并计算安全并发
这一步要找出“并发再增加,QPS 不涨、延迟猛涨、错误率上升”的位置;这个位置的前一级就是拐点。比如 400 并发时 QPS 12000、P95 180ms、错误率 0.1%;800 并发时 QPS 12500、P95 900ms、错误率 3%,那拐点在 400 到 800 之间,安全并发建议取 400 的 60%-70%,即 240-280。最后做稳定性测试:
wrk -t4 -c280 -d1800s --latency http://127.0.0.1/1k.bin
注意:线上还有数据库、缓存、连接池、网关,压测结果要留至少 30% 余量。
第七步:输出评估报告
这一步要把结论写成可交接的文档。记录:服务器规格、系统版本、Nginx 1.20.1、ab 2.3、wrk 4.2.0、测试命令、并发梯度、QPS、P95/P99、错误率、资源峰值、瓶颈点、安全并发建议。结论示例:4 核 8G 单台 Nginx 静态 1KB 文件,安全并发约 280,QPS 约 12000,P95 小于 200ms。
小结
- 先定指标:并发、QPS、P95/P99、错误率、资源使用率。
- 压测机和被测机分离,文件句柄限制提前放大。
- 阶梯加压找拐点,不要只测一个并发数。
- 同步看 CPU、内存、磁盘、网络,定位真实瓶颈。
- 安全并发取拐点的 60%-70%,并做 30 分钟稳定性验证。
原文链接:https://www.gj0.com/thread-833.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。