要测出Nginx静态文件服务器的真实最大并发吞吐,需以稳定响应为前提,聚焦RPS或MB/s指标,结合阶梯式压测、系统可观测性及关键配置(如sendfile on、keepalive_timeout)对齐,在P95延迟突增或错误率超0.5%时定位性能拐点。

明确测试目标和关键指标
静态资源压测不是比谁连得更多,而是验证在可接受延迟(如 P95 ≤ 100ms)和低错误率(
- RPS(Requests Per Second):每秒成功返回的请求数,比如 20,000 req/s
- 吞吐带宽(MB/s):尤其测大文件(如 1MB 图片)时更关键
- P95 延迟:95% 的请求响应时间,超过阈值即说明已过载
- 错误率(5xx / 连接拒绝 / timeout):一旦上升,说明瓶颈已出现
选对工具并配置真实场景
推荐用 JMeter 或 wrk(轻量、高精度),避免 ab(功能简陋、不支持长连接复用、统计粗糙):
-
wrk 示例(推荐):
wrk -t4 -c4000 -d30s --latency http://your-nginx/test.jpg表示 4 线程、4000 并发连接、压测 30 秒,记录延迟分布 - JMeter 注意点:启用 HTTP Cache Manager 和 Connection Pool;使用 CSV 数据集轮询多个不同大小文件(1KB/100KB/1MB),模拟真实访问分布;聚合报告里重点看“90% Line”和“Error %”
-
务必关闭客户端缓存:加
Cache-Control: no-cache请求头,避免命中本地缓存导致数据失真
同步检查系统与 Nginx 关键限制
压测中一旦 RPS 卡住或错误突增,大概率不是 Nginx 不行,而是被底层卡住:
-
文件描述符:确认
ulimit -n≥ 65535,且 Nginx 配置了worker_rlimit_nofile 65535;和events { worker_connections 16384; } -
临时端口耗尽(反向代理模式下):若 Nginx 后端是自身静态服务(即直读磁盘),此条可忽略;但若走 upstream,则需调大
net.ipv4.ip_local_port_range = "1024 65000" -
磁盘 I/O:用
iostat -x 1观察 %util 是否持续 >90%,NVMe SSD 才适合高并发小文件读取;机械盘会成硬瓶颈 - 内存是否够用:Nginx 空闲连接约占 128–256KB/连接;1 万并发至少预留 1.5GB 内存专供 Nginx
逐步加压并定位拐点
不要一上来就冲 5 万并发。采用阶梯式加压(如 1k → 5k → 10k → 20k),每档运行 60 秒,记录指标变化:
- 当 P95 延迟开始明显上扬(比如从 20ms 涨到 80ms),说明已接近当前配置的舒适区上限
- 当错误率突破 0.5%,或出现大量 “Connection refused”、“socket timeout”,说明系统级资源(fd、端口、内存)或内核参数(somaxconn)已触顶
- 此时回查
nginx -T输出,确认是否启用了sendfile on;、tcp_nopush on;、keepalive_timeout 60s;等静态优化指令


















