Comment bien configurer le stockage de Varnish pour éviter les problèmes de mémoire et de swap, notamment avec le cache Transient Storage qui n’a pas de limite par défaut.
Introduction
Varnish peut cacher les données en mémoire et/ou sur disque.
On peut donc lui dire qu’on lui alloue 512 Mo de mémoire pour le cache, ainsi que 95 % de l’espace libre d’une partition, en ajoutant les paramètres ci-dessous :
-s malloc,512M \
-s file,/var/lib/varnish/varnish_storage.bin,95%
Le stockage " Transient "
Varnish possède aussi, par défaut, un cache en mémoire pour les objets de courte durée. Ce cache n’a pas de limite par défaut, ce qui peut donc faire swapper et crasher votre serveur (ou le mien 🙂).
Ce cache se nomme “Transient Storage”.
Pour limiter ce cache et donc contrôler totalement l’utilisation en mémoire de vos instances Varnish, ajoutez aux options du démon :
-s Transient=malloc,1G \
-s malloc,6G \
-s file,/var/lib/varnish/varnish_storage.bin,95%
Votre Varnish utilisera dans ce cas 1 Go de mémoire pour les objets de faible TTL, 6 Go de mémoire pour le reste, plus le stockage sur disque. Varnish utilisera donc au maximum 7 Go de RAM et ne fera plus swapper votre serveur.
Commandes utiles
varnishadm storage.list: pour lister les stockages actifs de votre instance Varnish.
Effet secondaire
Le compromis est que les fichiers non “pipés”, supérieurs à la taille du cache “Transient” définie, seront tout simplement tronqués et donc corrompus.
Dans ce cas, le stockage sur disque n’est pas forcément utile, à vous de voir 🙂.