web-dev-qa-db-fra.com

Détermination de la source d'utilisation du cache mémoire

Je dépanne une machine dont les ralentissements sont dus à une utilisation intensive de la permutation après plusieurs jours d'utilisation. Le système dispose de 16 Go de RAM et devrait normalement fonctionner normalement, sauf qu'un volume important de la RAM est utilisé par le cache et n'est pas libéré si nécessaire. Une utilisation continue bloquera le système jusqu'à ce que jusqu'à 12 Go soient bloqués dans le cache.

Avant que vous ne le mentionniez, je connais bien Linux a mangé mon bélier .

Un affichage typique de free après 3 à 4 jours de course est:

              total        used        free      shared  buff/cache   available
Mem:            15G        4.4G        184M        280M         10G        116M
Swap:           15G        7.8G        8.1G

Pour résoudre ce problème, je suis tombé à zéro swapiness.

$ cat /proc/sys/vm/swappiness 
0

De plus, je ne parviens pas à appeler manuellement un vidage de mémoire cache avec un effet significatif.

$ Sudo su -c "free -h && sync && echo 3 > /proc/sys/vm/drop_caches && free -h"
              total        used        free      shared  buff/cache   available
Mem:            15G        4.4G        166M        280M         10G        104M
Swap:           15G        7.8G        8.1G
              total        used        free      shared  buff/cache   available
Mem:            15G        4.4G        186M        280M         10G        115M
Swap:           15G        7.8G        8.1G

Je me demande si cela a un rapport avec la vidéo intégrée avec Skylake. Quoi qu'il en soit, je ne sais pas comment continuer à décrire le problème, la plupart des ressources Internet affirmant que l'utilisation du cache est normale et qu'elle sera libérée si nécessaire - alors que ce n'est clairement pas le cas. Où devrais-je regarder ensuite?

3
DivinusVox

Pour en savoir plus sur le "cache mémoire", utilisez slabtop, utilisez -s pour trier la sortie et c correspond à la taille du cache. Utilisez:

Sudo slabtop -s c

Pour moi, la majeure partie du cache est liée à inode_cache


Et à propos de "swap", vous pouvez utiliser le fichier status de chaque répertoire de processus dans /proc pour savoir lequel d’entre eux utilise le swap.

Pour programme spécifique:

cd /proc/$(pgrep -x programname)
grep -i swap status

Pour obtenir une liste de toutes les tailles de cache de processus:

cd /proc
find -maxdepth 2 -iname status -exec grep -i -e name -e swap {} \; -exec echo "---" \;

la sortie serait semblable à:

---
Name:   atd
VmSwap:        0 kB
---
Name:   rsyslogd
VmSwap:        0 kB
---
Name:   cron
VmSwap:        0 kB
3
Ravexina