RespReason Service Unavailable but no backend connection attempt?!
Hettwer, Marian
mhettwer at team.mobile.de
Wed Mar 11 11:22:20 CET 2015
Hi Varnish Users,
I¹m seeing some weird behavior in a load test I¹m doing. When stressing
our backends up to the area of 2000 req/s, I¹m seeing sporadic 503
responses from varnish.
My understanding is, that this would happen if, for instance, no backend
is available.
I¹m looking at my logs like that:
varnishlog -n essearchvarnish -q "RespStatus >= 500 or BerespStatus >= 500³
A sample 503 output is that one:
* << Request >> 27632438
- Begin req 27630762 rxreq
- Timestamp Start: 1426066874.412913 0.000000 0.000000
- Timestamp Req: 1426066874.412913 0.000000 0.000000
- ReqStart 10.47.28.251 49641
- ReqMethod GET
- ReqURL /svc/somequery?string?documents=1
- ReqProtocol HTTP/1.1
- ReqHeader Accept-Language: de
- ReqHeader User-Agent: Java1.8.0
- ReqHeader Host: essearch.local
- ReqHeader Connection: Keep-Alive
- ReqHeader Accept-Encoding: gzip
- VCL_call RECV
- VCL_return hash
- VCL_call HASH
- VCL_return lookup
- Debug "XXXX HIT-FOR-PASS"
- HitPass 2201620563
- VCL_call PASS
- VCL_return fetch
- Link bereq 27632439 pass
- Timestamp Fetch: 1426066874.412967 0.000054 0.000054
- Timestamp Process: 1426066874.412979 0.000066 0.000012
- RespHeader Date: Wed, 11 Mar 2015 09:41:14 GMT
- RespHeader Server: Varnish
- RespHeader X-Varnish: 27632438
- 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: 282
- Debug "RES_MODE 2"
- RespHeader Connection: keep-alive
- Timestamp Resp: 1426066874.413033 0.000119 0.000053
- ReqAcct 454 0 454 212 282 494
- End
What makes me wonder is, that this output is missing the actual backend
request attempts. Also, printing "RespReason Service Unavailable³ twice in
a row?!? Why?
So in a second shell, on the same varnish at the same time, I have this
query running:
varnishlog -b -n essearchvarnish -q "RespStatus >= 500 or BerespStatus >=
500³
I added the -b parameter to see the backend requests.
However, I get no output at all. So it seems varnish would throw the 503
without asking the backend?
Or, hopefully more likely, I¹m not using varnishlog correctly?!
This is varnish 4.0.3-2~wheezy. How can I print client and backend
connections in one go?
Doing using the -c and -b parameter in parallel doesn¹t produce any output
(while in my other console, I still have the first query which produces
the above output).
I know that around 2000 req/s my backends are getting a bit slower ( up to
2 seconds for responses), but this should not hit any internal timeouts of
varnish, right? I haven¹t changed the default timeouts.
Also the backends itself are healthy. I¹m watching the backends (several
tomcats) directly, and also from the varnish perspective via
watch -n1 varnishadm -n essearchvarnish backend.list
Everything looks healthy.
Any help for how I could dig into this further would be appreciated :-)
I guess it boils down to better use varnishlog on my side. Like getting
client and backend connections for a request at the same time and not by
using varnishlog in two shells differently.
best regards,
Marian
More information about the varnish-misc
mailing list