Êtes-vous confronté à un problème de performances et pensez-vous qu'il pourrait être lié à l'utilisation du cache ? Une utilisation élevée du cache ne devrait normalement pas entraîner de problèmes de performances, mais cela peut être la cause principale dans de rares cas.
Qu'est-ce que le cache mémoire
Afin d'accélérer les opérations et de réduire les E/S de disque, le noyau fait généralement autant de mise en cache qu'il a de mémoire De par leur conception, les pages contenant des données mises en cache peuvent être réutilisées à la demande pour d'autres utilisations (par exemple, des applications). n'est pas plus lent que de réclamer des pages vierges intactes.
Quel est le but de /proc/sys/vm/drop_caches
L'écriture dans /proc/sys/vm/drop_caches permet de demander au noyau de supprimer immédiatement autant de données mises en cache propres que possible. Cela se traduira généralement par une certaine disponibilité de la mémoire; cependant, dans des circonstances normales, cela ne devrait pas être nécessaire.
Comment vider le cache mémoire à l'aide de /proc/sys/vm/drop_caches
Écrire la valeur appropriée dans le fichier /proc/sys/vm/drop_caches oblige le noyau à supprimer les caches, les dentries et les inodes propres de la mémoire, ce qui libère cette mémoire.
# sync; echo 1 > /proc/sys/vm/drop_caches
# sync; echo 2 > /proc/sys/vm/drop_caches
# sync; echo 3 > /proc/sys/vm/drop_caches
L'exécution de la synchronisation écrit les pages modifiées sur les disques. Normalement, les pages sales sont la mémoire utilisée, elles ne sont donc pas disponibles pour être libérées. Ainsi, l'exécution de la synchronisation peut aider les opérations de suppression qui s'ensuivent à libérer davantage de mémoire.
Cache de pages est la mémoire conservée après la lecture des fichiers. Le noyau Linux préfère conserver le cache des pages inutilisées en supposant que les fichiers lus une fois seront très probablement lus à nouveau dans un proche avenir, évitant ainsi l'impact des performances sur les E/S du disque.
dentry et inode_cache sont la mémoire conservée après la lecture des attributs de répertoire/fichier, tels que open() et stat(). dentry est commun à tous les systèmes de fichiers, mais inode_cache est basé sur le système de fichiers. Le noyau Linux préfère conserver ces informations en supposant qu'elles seront à nouveau nécessaires dans un avenir proche, évitant ainsi les E/S de disque.
Remarque :Démarrer avec la commande de synchronisation comme indiqué dans les 3 commandes ci-dessus est facultatif. La commande sync permet au noyau d'écrire autant de pages de cache sales sur le disque que possible (pour maximiser le nombre de pages de cache de données pouvant être supprimées)Comment vider le cache mémoire à l'aide de sysctl
Vous pouvez également déclencher la suppression du cache en utilisant sysctl -w vm.drop_caches=[number] commande.
sysctl -w vm.drop_caches=3
sysctl -w vm.drop_caches=2
sysctl -w vm.drop_caches=1Remarque :L'utilisation de vm.drop_caches peut provoquer un blocage si le système est soumis à une surcharge de mémoire et d'E/S !!!
Les données mises en cache "propres" peuvent être supprimées. Les données en cache "sales" doivent être écrites quelque part. L'utilisation de vm.drop_caches ne déclenchera jamais le noyau pour supprimer le cache sale.