Varnish 503 ao entregar uma página lenta

3

O Varnish continua lançando o 503 Service Indisponível ao tentar carregar uma página que leva mais tempo para ser gerada no servidor da Web.

No vernizlog, vejo um erro FetchError c http read error: 0 , embora não tenha certeza do que isso significa.

Eu também tentei aumentar os tempos limite de back-end:

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

O back-end é um servidor Apache.

Todas as outras páginas funcionam bem.

Alguma idéia?

    
por Andrei Serdeliuc 13.10.2010 / 13:59

1 resposta

7

A mensagem de erro significa (referências de números de linha referem-se ao verniz 2.1.3):

Ao buscar um cabeçalho [bin / varnishd / cache_fetch.c: 399], ou:

a) ocorreu um estouro [bin / varnishd / cache_httpconn.c: 170]

ou

b) ocorreu um erro ao chamar read () [bin / varnishd / cache_httpconn.c: 175]

O número no final é o valor de errno, então como é 0 (sem erro) eu assumirei que a opção a) ocorreu porque read() não deve retornar um número negativo sem configurar errno.

O estouro é detectado com o seguinte código [bin / varnishd / cache_httpconn.c: 167] retornando um resultado negativo:

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

htc->ws é uma struct ws [bin / varnishd / cache.h: 126] que é uma "estrutura da área de trabalho" O membro r é o comprimento reservado dessa área de trabalho. htc->rxbuf refere-se a struct txt [bin / varnishd / cache.h: 109], mas não há comentários descrevendo a que os membros (b & e) se referem. Começando e terminando talvez?

Eu não sei como espaços de trabalho são redimensionados (ou mesmo se eles são), mas - e eu estou realmente em adivinhando território aqui - eu diria que algumas possíveis causas do problema são:

  • Um número muito grande de cabeçalhos
  • cabeçalhos muito longos
  • Um erro em como o Varnish redimensiona os espaços de trabalho (se isso acontecer)

Pode ser útil tentar encontrar o ponto no qual o erro pode ser forçado a ocorrer, pesquisando no espaço de:

  • Comprimentos do cabeçalho
  • Números de cabeçalhos

e veja se você pode reproduzir o problema de maneira confiável.

Você pode conseguir contornar o problema aumentando a opção http_headers runtime. (Se você estiver executando o < 2.1, acho que é uma opção de tempo de compilação ou de configuração)

    
por 13.10.2010 / 22:01