You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Varnish间歇性出现大量未完成请求(返回504)求助

Varnish间歇性大量未完成请求(504错误)排查

问题现象

Varnish中间歇性出现大量未完成请求,这类请求未建立后端连接,最终返回504状态码。

异常日志示例

问题发生时,访问日志中出现不完整的日志条目,缺少请求方法、URL、状态码等核心字段:

20241218211542 - - - 0 - Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.6778.108 Mobile Safari/537.36 (compatible; Googlebot/2.1; )

当前Varnish配置

# Backend storage specification, see Storage Types in the varnishd(5) # man page for details. 
#VARNISH_STORAGE="malloc,700G"
VARNISH_STORAGE="file,/cache-data/varnish_cache.bin,2750G" 
# User and group for the varnishd worker processes VARNISH_USER=varnish VARNISH_GROUP=varnish
# Other options, see the man page varnishd(1)
DAEMON_OPTS="-p thread_pools=4 -p thread_pool_min=150 -p thread_pool_max=3000 -p thread_pool_timeout=300 -p thread_pool_stack=96k -l 4000M -p timeout_idle=70 -p backend_idle_timeout=300"

排查与优化建议

  • 线程池资源校验:当前配置4个线程池,每个池最大3000线程,总线程数达12000。需检查系统文件句柄限制(ulimit -n),若系统允许的最大文件句柄数低于线程数+预留资源,会导致Varnish无法创建新连接,请求排队超时。可适当调小thread_pool_max,或提升系统文件句柄上限。
  • 超时参数补全:当前配置未设置first_byte_timeout(默认60秒),若请求因线程耗尽无法分配到处理资源,会触发504。建议添加-p first_byte_timeout=120延长等待时间,同时结合timeout_idle调整闲置连接回收策略。
  • 存储性能排查:采用文件存储(2750G)需检查存储磁盘的IO负载,若磁盘IO瓶颈会导致Varnish处理缓存读写时阻塞,占用线程资源。可通过iostat、vmstat监控磁盘性能,必要时切换为malloc存储或升级存储介质。
  • 爬虫流量管控:日志中出现Googlebot请求,大量爬虫并发可能瞬间占满线程池。建议在VCL中添加爬虫流量限速规则,或通过thread_pool_add_delay参数控制线程创建速率,避免突发流量压垮线程池。
  • 日志完整性排查:不完整日志说明请求处理过程被中断,可能是客户端提前断开连接,或Varnish线程崩溃。可开启Varnish的varnishlog实时监控请求生命周期,定位中断环节。

内容的提问来源于stack exchange,提问作者Vinay Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 13:32:34