Brotli 本身不必然导致 CPU 过载,关键在配置失当:高频小响应、大体积动态响应、高压缩级别滥用三类行为会使其成为“CPU 放大器”;应结合日志分析、降级验证与预压缩优化。
评估高并发下 Brotli 对 CPU 的额外占用,关键不是看“开了 Brotli 之后 CPU 升了多少”,而是看压缩行为是否在错误时机、对错误资源、以错误强度被触发。Brotli 本身不必然导致 CPU 过载,但配置失当会让它在流量高峰时变成“CPU 放大器”。
真正吃 CPU 的从来不是 Brotli 算法本身,而是它被反复、低效、无差别调用的过程:
别只看 top 里 nginx worker 的 %CPU,要结合 access log 和 error log 找出“谁在拖慢整体”:
$sent_http_content_encoding $request_time $body_bytes_sent $http_user_agent 字段,采样高峰期数据$body_bytes_sent > 500000(500KB+)或 $request_time > 0.5(500ms+)的请求,它们大概率是 CPU 热点pool alloc 频繁记录、worker process X exited on signal 9 或 upstream timeout —— 这些是内存和 CPU 同时承压的信号这是归因最直接的方法,无需改代码或重编译:
对 JS/CSS/HTML/SVG 等静态资源,完全可绕过运行时压缩:
brotli -Z -f --quality=11 asset.js 生成 asset.js.br
brotli_static on;,并确保 brotli on; 仍启用(兜底用)