【发布时间】:2016-09-21 23:52:15
【问题描述】:
我在 Centos 7.2 上有一个 Varnish 4.0.3 服务器。 Varnish 配置了三个后端。我收到来自 Varnish 的间歇性 503。我在 503 事件期间拉了一个 tcpdump,我看到了:
- 消费者向 Varnish 提出请求
- Varnish 打开到后端的套接字。
- 后端响应时间
- Varnish 向后端发送一个 ACK,FIN。
- Varnish 向消费者发送 503。
- 后端向 Varnish 发送 ACK、FIN
失败的请求与成功的请求在根本上看起来并没有什么不同。失败率约为每 20k 个请求 1 个。
- Begin req 2795361 rxreq
- Timestamp Start: 1464106437.502383 0.000000 0.000000
- Timestamp Req: 1464106437.502383 0.000000 0.000000
- ReqStart 10.14.X.X 43190
- ReqMethod GET
- ReqURL /service/v2/service/parameter/parameter/parameter
- ReqProtocol HTTP/1.1
- ReqHeader Accept: application/json
- ReqHeader Content-Type: application/json
- ReqHeader Host: UpsteamLoadBalancer:6081
- ReqHeader Connection: Keep-Alive
- ReqHeader User-Agent: Apache-HttpClient/4.2.4 (java 1.5)
- ReqHeader X-Forwarded-For: 10.14.X.X
- VCL_call RECV
- ReqURL /service/v2/service/parameter/parameter/parameter
- ReqUnset X-Forwarded-For: 10.14.X.X
- ReqHeader X-Forwarded-For: 10.14.X.X
- VCL_return hash
- VCL_call HASH
- VCL_return lookup
- Debug "XXXX MISS"
- VCL_call MISS
- VCL_return fetch
- Link bereq 2795368 fetch
- Timestamp Fetch: 1464106442.526296 5.023913 5.023913
- Timestamp Process: 1464106442.526311 5.023929 0.000015
- RespHeader Date: Tue, 24 May 2016 16:14:02 GMT
- RespHeader Server: Varnish
- RespHeader X-Varnish: 2795367
- RespProtocol HTTP/1.1
- RespStatus 503
- RespReason Service Unavailable
- RespReason Service Unavailable
- VCL_call SYNTH
- RespHeader Content-Type: text/html; charset=utf-8
- RespHeader Retry-After: 5
- VCL_return deliver
- RespHeader Content-Length: 281
- Debug "RES_MODE 2"
- RespHeader Connection: keep-alive
- Timestamp Resp: 1464106442.526356 5.023974 0.000045
- ReqAcct 290 0 290 211 281 492
- End
【问题讨论】:
-
嘿斯坦,你还有这个问题吗?如果是这样,你能发布你的 VCL 吗?
-
@alejdg 我们解决了这个问题——如果我没记错的话,Varnish 的缓存太小了(默认的 100mb?)。缓存已满时发生故障 (1/20000)。我们增加了缓存,问题就消失了。感谢后续!