3 votes

Varnish 503 lors de la livraison d'une page lente

Varnish continue de lancer 503 Service indisponible lorsqu'il essaie de charger une page qui prend plus de temps à générer sur le serveur web.

Dans varnishlog, je peux voir un FetchError c http read error: 0 erreur, bien que je ne sois pas tout à fait sûr de ce que cela signifie.

J'ai également essayé d'augmenter les délais d'attente du backend :

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

Le backend est un serveur Apache.

Toutes les autres pages fonctionnent bien.

Des idées ?

7voto

Niels Points 1

Le message d'erreur signifie (les références aux numéros de lignes se réfèrent à varnish 2.1.3) :

Pendant la récupération d'un en-tête [bin/varnishd/cache_fetch.c:399], soit :

a) un dépassement de capacité s'est produit [bin/varnishd/cache_httpconn.c:170].

o

b) une erreur s'est produite lors de l'appel de read() [bin/varnishd/cache_httpconn.c:175].

Le nombre à la fin est la valeur de errno, donc puisqu'il est 0 (pas d'erreur) je devrais supposez que l'option a) s'est produite depuis read() ne devrait pas retourner un nombre négatif sans mettre errno.

Le dépassement est détecté avec le code suivant [bin/varnishd/cache_httpconn.c:167] qui renvoie un résultat négatif :

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

htc->ws es un struct ws [bin/varnishd/cache.h:126] qui est une "structure d'espace de travail" Le membre r est la longueur réservée de cet espace de travail. htc->rxbuf fait référence à un struct txt [bin/varnishd/cache.h:109] mais il n'y a pas de commentaire décrivant ce à quoi les membres (b & e) font référence. Le début et la fin peut-être ?

Je ne sais pas comment les espaces de travail sont redimensionnés (ou même s'ils le sont) mais - et je suis vraiment en territoire de conjecture ici - je supposerais que les causes possibles du problème sont les suivantes :

  • Un très grand nombre d'en-têtes
  • En-têtes très longs
  • Un bug dans la façon dont Varnish redimensionne les espaces de travail (s'il le fait)

Il pourrait être utile d'essayer de trouver le point où l'erreur peut être forcée à se produire en cherchant dans l'espace de :

  • Longueurs d'en-tête
  • Nombre d'en-têtes

et voyez si vous pouvez reproduire le problème de manière fiable.

Vous pouvez contourner le problème en augmentant le nombre d'heures d'utilisation de l'appareil. http_headers option d'exécution. (Si vous utilisez < 2.1, je pense que c'est une option de compilation ou de configuration).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X