17 votes

suppression de la mémoire cache de linux

J'ai un serveur Web qui a 8 Go de mémoire vive et qui exécute un site php assez intensif (1 site) qui fait de la manipulation de fichiers, des graphiques, des courriels, des forums, etc. L'environnement est loin d'être statique, ce qui m'amène à penser qu'il y a très peu à gagner à mettre en cache quoi que ce soit dans la mémoire vive, puisque presque chaque requête au serveur crée des pages nouvelles ou mises à jour. Et une grande partie de la mise en cache est effectuée côté client, de sorte que nous avons une tonne de requêtes 304 lorsqu'il s'agit d'images, de javascript, de css.

De plus, j'ai des fichiers de langue qui sont écrits dans des fichiers plats sur le serveur où la mémoire cache est certainement plus efficace que la lecture depuis le disque. Mais il n'y a qu'une poignée de fichiers de ce type.

En deux semaines environ, je suis passé de 98% de RAM libre à 4% de RAM libre. Cela s'est produit à un moment où nous avons également poussé plusieurs grosses mises à jour svn sur le serveur.

Ma question est de savoir si mon serveur sera mieux réglé si je vide périodiquement mon cache (je suis conscient du sentiment de Linus Torvalds sur le cache) en utilisant la commande suivante :

sync; echo 3 > /proc/sys/vm/drop_caches

Ou serait-il préférable que je modifie le fichier suivant :

/proc/sys/vm/swappiness  

Si je remplace la valeur par défaut de 60 par 30, il devrait y avoir beaucoup moins de permutation et beaucoup plus de réutilisation du cache périmé.

Cela fait du bien de voir tout ce cache libéré par la première commande, mais je vous mentirais si je vous disais que c'est bon pour l'environnement de bureau. Mais qu'en est-il d'un serveur web tel que je l'ai décrit ci-dessus ? Qu'en pensez-vous ?

EDIT : Je suis conscient que le système acquiert de la mémoire au fur et à mesure de ses besoins à partir de la mémoire cache, mais merci de le signaler pour plus de clarté. Est-ce que je m'imagine qu'Apache ralentit lorsque la majeure partie de la mémoire du serveur est stockée dans le cache ? S'agit-il d'un problème tout à fait différent ?

16voto

David Spillett Points 22424

L'effacement des caches nuit aux performances, il ne les améliore pas. Si la mémoire vive était nécessaire pour autre chose, elle serait utilisée par autre chose, donc tout ce que vous faites, c'est réduire le ratio hit/miss du cache pendant un certain temps après avoir effectué l'effacement.

Si les données dans le cache sont très obsolètes (c'est-à-dire qu'il s'agit de données mises en cache lors d'une opération inhabituelle), elles seront remplacées par des données plus "récentes" au fur et à mesure des besoins, sans que vous ayez à les vider artificiellement.

La seule raison de courir sync; echo 3 > /proc/sys/vm/drop_caches Normalement, c'est si vous allez essayer de faire des tests de performance d'E/S et que vous voulez un état connu à partir duquel commencer (en exécutant l'abandon du cache entre les exécutions pour réduire les différences dans les résultats dues au cache étant amorcé différemment sur chaque exécution).

Le noyau va parfois échanger quelques pages même s'il y a beaucoup de RAM qu'il pourrait réclamer à partir du cache/buffers, et le réglage du paramètre de swappiness peut arrêter cela si vous trouvez que c'est un problème pour votre serveur. Vous pourriez en tirer un petit avantage, mais vous verrez probablement une baisse temporaire des performances. tomber en vidant artificiellement le cache+tampon.

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