Varnish

提供慢速頁面時清漆 503

  • October 13, 2010

當嘗試載入需要較長時間在 Web 伺服器上生成的頁面時,Varnish 不斷拋出 503 Service Unavailable。

在 varnishlog 中,我可以看到一個FetchError c http read error: 0錯誤,但我不太確定它的含義。

我還嘗試增加後端超時:

backend default {
   .host = "x.x.x.x";
   .port = "80";
   .connect_timeout = 600s;
   .first_byte_timeout = 600s;
   .between_bytes_timeout = 600s;
}

後端是 Apache 伺服器。

所有其他頁面工作正常。

有任何想法嗎?

錯誤消息的意思是(行號參考參考 varnish 2.1.3):

獲取標頭時

$$ bin/varnishd/cache_fetch.c:399 $$, 任何一個: a) 發生溢出

$$ bin/varnishd/cache_httpconn.c:170 $$ 或者

b) 呼叫 read() 時出錯

$$ bin/varnishd/cache_httpconn.c:175 $$ 最後的數字是 errno 的值,所以因為它是 0(沒有錯誤),所以我假設選項 a) 發生了,因為read()不設置 errno 不應該返回負數。

使用以下程式碼檢測溢出

$$ bin/varnishd/cache_httpconn.c:167 $$返回否定結果:

i = (htc->ws->r - htc->rxbuf.e) - 1;    /* space for NUL */

htc->ws是一個struct ws

$$ bin/varnishd/cache.h:126 $$這是一個“工作空間結構” r 成員是該工作空間的保留長度。htc->rxbuf指一個struct txt $$ bin/varnishd/cache.h:109 $$但沒有評論描述成員 (b & e) 所指的內容。也許開始和結束? 我不知道如何調整工作區的大小(或者即使它們是)但是 - 我真的在這裡猜測領域 - 我認為問題的一些可能原因是:

  • 大量的標頭
  • 很長的標題
  • Varnish 如何調整工作區大小的錯誤(如果有)

嘗試通過搜尋以下空間來找到可以強制發生錯誤的點可能很有用:

  • 標題長度
  • 標頭數量

看看你是否能可靠地重現問題。

您可以通過增加http_headers執行時選項來解決此問題。(如果您執行的是 < 2.1,我認為這是一個編譯時或配置時選項)

引用自:https://serverfault.com/questions/190470