Determinando a origem do uso do cache de memória

1

Estou solucionando problemas de uma máquina com lentidão devido ao uso pesado de troca após vários dias de execução. O sistema tem 16 GB de memória RAM e geralmente deve estar bem, exceto que um grande volume de memória RAM está sendo usado pelo cache e não sendo liberado na necessidade. O uso contínuo triturará o sistema enquanto 12 GB estiverem amarrados no cache.

Antes de mencioná-lo, estou bem ciente do Linux Ate My Ram .

Uma exibição típica de livre após 3 a 4 dias de execução é:

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

Para solucionar problemas, reduzi a capacidade de troca para zero.

$ cat /proc/sys/vm/swappiness 
0

Além disso, não consigo chamar manualmente uma limpeza de cache com nenhum efeito significativo.

$ 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

Gostaria de saber se isso pode ter a ver com o vídeo on-board com o Skylake. Independentemente disso, eu não tenho certeza de como continuar a analisar o problema, com a maioria dos recursos da Internet dizendo que o uso do cache é normal e será liberado quando necessário - quando claramente não é. Onde devo procurar a seguir?

    
por DivinusVox 31.05.2017 / 08:00

1 resposta

2

Para saber mais sobre "cache de memória", use slabtop , usando -s para classificar a saída e c para o tamanho do cache, então use:

sudo slabtop -s c

Para mim, a maior parte da cache está relacionada com inode_cache

E sobre "swap", Você pode usar o arquivo status em cada diretório do processo em /proc para descobrir qual deles está usando o swap.

Para um programa específico:

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

Para obter uma lista de todo o tamanho do cache do processo:

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

a saída seria semelhante a:

---
Name:   atd
VmSwap:        0 kB
---
Name:   rsyslogd
VmSwap:        0 kB
---
Name:   cron
VmSwap:        0 kB
    
por Ravexina 31.05.2017 / 08:19