关键不是看QPS高低,而是观察日志写行为是否稳定、延迟可控、不拖慢请求处理,核心方法是“配置调优+工具观测+场景模拟”三步结合。

直接压测日志写入性能,关键不是看 QPS 多高,而是观察日志写行为是否稳定、延迟可控、不拖慢请求处理。核心方法是“配置调优 + 工具观测 + 场景模拟”三步结合。
用 ab 或 wrk 模拟真实并发请求
避免只压静态文件,要触发 access_log 实际写入:
- 发起带 query 参数或 header 的请求(如
curl -H "X-Test:1" http://localhost/health),确保每条请求都生成独立日志行 - 用
wrk -t4 -c1000 -d30s http://localhost/持续压测 30 秒,模拟中等并发;对万级场景,可升到-c5000并启用 keep-alive - 禁用缓存(加
Cache-Control: no-cache)和静态资源拦截,防止 location 匹配到access_log off分支而绕过日志
监控日志写入行为是否符合预期
不能只看日志文件增长,要看系统调用和内存缓冲是否生效:
使用tbot机器ID身份文件配合tsh CLI,通过Teleport访问控制SSH登录托管主机或执行远程命令。
- 挑一个 worker 进程,用
strace -p $(pgrep nginx | head -1) -e write,fsync -f观察:
— 是否从高频write()变为偶发批量写(说明 buffer 生效)
—fsync()是否按flush=设定间隔出现(如设了flush=2s,就应约每 2 秒一次) - 查内存缓冲占用:
grep -i "buffer" /proc/$(pgrep nginx | head -1)/status看VmRSS是否随buffer=64k × worker_processes增长趋势一致 - 用
iotop -p $(pgrep nginx)确认磁盘写入速率是否平滑,避免突发尖峰(说明 flush 控制有效)
对比不同配置下的关键指标
每次只改一个参数,记录三项硬指标:
-
平均请求延迟(p95):用 wrk 输出的
Latency Distribution对比,buffer 启用后应明显下降(尤其磁盘慢时) -
实际 QPS 稳定性:观察 wrk 结果中
Requests/sec波动幅度,buffer 不足时易因刷盘卡顿导致抖动 -
日志落盘延迟:在日志里加
$msec,用tail -f access.log | awk '{print systime() - $NF}'实时算写入延迟(单位秒),理想值应 ≤ flush 值 + 0.1s
识别典型瓶颈信号
以下现象说明日志配置未调优到位:
- strace 显示
write()频率和请求数基本 1:1 → 缓冲未启用或 buffer 太小 - 日志文件大小增长缓慢但
iotop显示持续高 IO → 可能被 logrotate copytruncate 或 rsyslog 抢占句柄 - 压测中
nginx -t正常但 worker 进程 CPU 升至 90%+ 且request_time突增 → 日志刷盘阻塞主线程,需检查 flush 是否过大或磁盘响应慢


















