Voici la sortie de free -m
:
total used free shared buffers cached
Mem: 7188 6894 294 0 249 5945
-/+ buffers/cache: 698 6489
Swap: 0 0 0
Je peux voir presque 6GB
(5945 Mo) de mémoire 7GB
utilisée pour la mise en cache des fichiers. Je sais comment vider les caches. Ma question est: est-il possible de voir quels fichiers (ou inodes) sont mis en cache?
linux
memory-usage
ssapkota
la source
la source
buffers
etcached
:sysctl -w vm.drop_caches=3
. Vous voudrez peut-être en savoir plus à ce sujet avant de l'utiliser. Parfois, c'est juste nécessaire. Son disponible - cela devrait être une autre raison :)Réponses:
Eh bien, il existe un moyen facile de jeter un œil au cache des pages du noyau si vous avez des ftools - "fincore" vous donne quelques informations récapitulatives sur les pages des fichiers qui sont le contenu du cache.
Vous devrez fournir une liste de noms de fichiers pour vérifier leur présence dans le cache de pages. En effet, les informations stockées dans les tables de cache de pages du noyau uniquement contiendront des références de blocs de données et non des noms de fichiers.
fincore
résoudrait les blocs de données d'un fichier donné par le biais de données d'inode et rechercherait les entrées respectives dans les tables de cache de pages.Il n'y a pas de mécanisme de recherche efficace pour faire l'inverse - obtenir un nom de fichier appartenant à un bloc de données nécessiterait la lecture de tous les inodes et blocs indirects du système de fichiers. Si vous avez besoin de connaître les blocs de chaque fichier stockés dans le cache de pages, vous devez fournir une liste de tous les fichiers de votre ou vos systèmes de fichiers
fincore
. Mais cela risque également de gâcher la mesure, car une grande quantité de données serait lue en parcourant les répertoires et en obtenant tous les inodes et blocs indirects - en les mettant dans le cache de pages et en expulsant les données du cache de pages que vous essayez d'examiner.la source
fincore
résoudrait les blocs de données d'un fichier donné par le biais de données d'inode et rechercherait les entrées respectives dans les tables de cache de pages. Il n'y a pas de mécanisme de recherche efficace faisant l'inverse - obtenir un nom de fichier appartenant à un bloc de données nécessiterait la lecture de tous les inodes et blocs indirects du système de fichiers. Ainsi, algorithmiquement, vous feriez mieux de fournir une liste de tous les fichiers de votre système de fichiersfincore
si vous avez vraiment besoin de ce niveau d'informations.Vous pouvez utiliser l' utilitaire vmtouch pour voir si un fichier nommé ou un répertoire est dans le cache. Vous pouvez également utiliser l'outil pour forcer les éléments dans le cache ou les verrouiller dans le cache.
Maintenant, je peux le "toucher" dans le cache.
Maintenant, pour voir combien est mis en cache ...
la source
J'écris un script shell très simple pour montrer les fichiers mis en cache en utilisant linux-fincore. Étant donné que le cache est une partie de la mémoire, mon code est de trouver le top 10 des utilisations RSZ du processus, et d'utiliser lsof pour trouver les fichiers ouverts par le processus, enfin utiliser linux-fincore pour savoir si ces fichiers sont mis en cache ou non.
Veuillez me corriger si je pense mal.
la source
lsof
signale également les fichiers mappés dans l'espace adresse du processus (et pas nécessairement mis en cache). Il est également probable qu'une grande partie des fichiers ne sera que partiellement / clairsemée en cache ...Vous pouvez également utiliser pcstat (Page Cache Stat) https://github.com/tobert/pcstat
J'espère que cela aide quelqu'un.
la source
J'ai écrit le script suivant qui imprime tous les fichiers et leur état de cache à l'aide de la commande pcstat. Il s'agit d'un script autonome pour les systèmes Linux x86_64. Il télécharge pcstat si nécessaire.
Le premier argument est l'emplacement du système de fichiers à analyser et le deuxième argument est le nombre de résultats (N premiers par nombre de pages dans le cache).
la source