2013-04-18 48 views
2

我在托管约30个网站的Rackspace云服务器上运行cPanel。我正在使用Varnish 3.0.3 + Apache 2.2.23。我得到了随机503错误。如果我重新启动httpd进程,它们会消失。我检查了Apache error_log,并且没有看到与503错误相关的任何内容。光油/阿帕奇随机503错误

这里是我的上光油的配置:

backend default { 
    .host = "198.61.161.65"; 
    .port = "8080"; 
    .connect_timeout = 600s; 
    .first_byte_timeout = 600s; 
    .between_bytes_timeout = 600s; 
    } 

这里是我的光油启动参数:

-a :80 -f /etc/varnish/default.vcl -T 127.0.0.1:6082 -t 120 -w 1,1000,120 -u varnish -g varnish -S /etc/varnish/secret -p http_max_hdr=256 -p http_resp_hdr_len=8192 -p http_range_support=on -s malloc,768M 

我跑varnishlog并记录一些错误。它们都具有TxResponse =服务不可用。对我而言,这意味着Apache没有及时响应Varnish的请求。这里有一个例子:

17 SessionOpen c 74.133.75.136 54227 :80 
17 ReqStart  c 74.133.75.136 54227 1219297893 
17 RxRequest c GET 
17 RxURL  c/
17 RxProtocol c HTTP/1.1 
17 RxHeader  c Host: www.archerytrade.org 
17 RxHeader  c User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:20.0) Gecko/20100101 Firefox/20.0 
17 RxHeader  c Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
17 RxHeader  c Accept-Language: en-US,en;q=0.5 
17 RxHeader  c Accept-Encoding: gzip, deflate 
17 RxHeader  c DNT: 1 
17 RxHeader  c Connection: keep-alive 
17 VCL_call  c recv lookup 
17 VCL_call  c hash 
17 Hash   c/ 
17 Hash   c www.archerytrade.org 
17 VCL_return c hash 
17 VCL_call  c miss fetch 
17 Backend  c 18 default default 
17 FetchError c http first read error: -1 0 (Success) 
17 VCL_call  c error deliver 
17 VCL_call  c deliver deliver 
17 TxProtocol c HTTP/1.1 
17 TxStatus  c 503 
17 TxResponse c Service Unavailable 
17 TxHeader  c Server: Varnish 
17 TxHeader  c Content-Type: text/html; charset=utf-8 
17 TxHeader  c Retry-After: 5 
17 TxHeader  c Content-Length: 441 
17 TxHeader  c Accept-Ranges: bytes 
17 TxHeader  c Date: Wed, 17 Apr 2013 01:39:52 GMT 
17 TxHeader  c X-Varnish: 1219297893 
17 TxHeader  c Age: 0 
17 TxHeader  c Via: 1.1 varnish 
17 TxHeader  c Connection: close 
17 Length  c 441 
17 ReqEnd  c 1219297893 1366162792.398471832 1366162792.541639328 0.000244379 0.143036604 0.000130892 
17 SessionClose c error 
17 StatSess  c 74.133.75.136 54227 0 1 1 0 0 0 257 441 

我尝试添加以下到我的default.vcl文件:

sub vcl_recv { 
set req.grace = 15s; 
... 
} 

sub vcl_fetch { 
if (beresp.status == 500 || beresp.status == 503) { 
set beresp.saintmode = 10s; 
return(restart); 
} 
set beresp.grace = 1h; 
... 
} 

周围的一些503错误的时候,我发现PHP的致命错误,脚本过早结束头文件和请求超出了由于可能的配置错误导致的10个内部重定向的限制,在Apache error_log中。

我试着增加/减少清漆和超时值的内存。我试着添加更高的http_max_hdr和http_resp_hdr_len值。

回答

1

我们在此服务器上使用APC,分配的内存大小仅为96M。几次增加内存并跟踪使用情况后,我们确定了312M。缓存命中率为99.7%,碎片为< 0.2%。 Apache 503错误几乎完全停止。

0

以下是什么帮我修复该问题:

执行下面的命令后,我知道了错误:

$ varnishlog -b -q 'FetchError' 

错误是“ - FetchError HTTP第一读取错误:EOF”,详情可设立 “first_byte_timeout” 后varnish site

然后发现,这个问题是固定的:

backend default { 
    .host = "127.0.0.1"; 
    .port = "8888"; 
    .connect_timeout = 1s; # Wait a maximum of 1s for backend connection (Apache, Nginx, etc...) 
    .first_byte_timeout = 5s; # Wait a maximum of 5s for the first byte to come from your backend 
    .between_bytes_timeout = 2s; # Wait a maximum of 2s between each bytes sent 
} 

详情在Varnish 503 Solutions