Como Linux limpa buff/cache?

Como o Linux limpa seu buff/cache? pq tenho 8GB de ram e fica 6GB no cache/buff.

sudo su
echo 3 > /proc/sys/vm/drop_caches

Se for base debian, também pode usar o:
sudo apt autoclean

1 curtida

Não é echo 2 não???

O buffer do é responsável por armazenar dados antes da escrita, o kernel marca páginas de memória que vem do disco como sujas, estas são processadas para verificar o que deve ser escrito (se mudou tudo ou não, etc) e por fim o que deve ser escrito é enviado para o writeback buffer. Depende da configuração mas em geral nada fica no buffer por mais de 30 segundos, entretanto em momentos de escrita intensa, o buffer pode ficar bem grande, em sistemas com muita RAM e pode passar de 1GB.

Já o cache, igualmente é dependente de configuração do sistema, analogamente ao buffer, ele armazena dados do disco para reduzir a necessidade de ler direto do disco que é muito lento, sob a premissa de que qualquer coisa que foi acessado uma vez tem chances de ser acessado novamente, o cache cresce enquanto existir espaço e é liberado quando falta memória para paginas de processos, baseado no algoritmo LRU (least recently used).

Esse sistema em si é um só, chamado de “page cache”, as páginas do cache podem eventualmente se tornar dirty page e eventualmente irão acabar no write-back buffer.

Por que esse comportamento de usar toda a memória?

  1. Simples, memória não usada é memória RAM desperdiçada.
  2. O usuário não vai experimentar problemas de performance por cause de um cache grande, que pode ser reduzido a qualquer instante para dar espaço a páginas de programas, mas vai experimentar problemas de performance em um cache miss (o dado procurado não está na RAM, está no disco).
1 curtida

Na verdade seria 1, mas se a pessoa quer ir mais fundo e se livrar até dos dentries e inodes ela pode usar 3, eu não recomendo o uso deste comando se não for para benchmarks.

Mais não tem uma configuração para eliminar automaticamente?

Como assim eliminar automaticamente? como eu disse, quando o sistema precisa ele descarta as páginas do cache. de forma automática. Você pode ajustar para ele descartar de forma mais agressiva, porém isso só vai contribuir para seu sistema se ver com mais frequência indo diretamente ao disco buscar dados.

eco 1> limpa apenas o cache;
eco 2> limpa dentries e inodes;
eco 3> limpa cache, dentries e inodes

1 curtida

Como deixo de forma mais agressiva a limpeza?

Você pode criar um script para isso, se assim o desejar.

1 curtida

você pode reduzir o valor em /proc/sys/vm/pagecache, o que vai levar o sistema a reclamar mais memória, é um valor percentual, portanto você pode definir algo como:

echo "50" > /proc/sys/vm/pagecache
# para ser permanente:
sysctl -w vm.pagecache="50"

ou ainda em valor absoluto: /proc/sys/vm/min_free_kbytes
Em alguns sistemas pode ser vfs_cache_pressure, não tenho certeza se pagecache é exclusivo do Fedora.

1 curtida

Algum motivo particular para limitar? Em geral é uma ideia ruim.

Com forme eu uso o PC fica muito cache/buff na memória, parece que fica lento algo assim.

Mudei o vfs_cache_pressure de 100 para 50, preciso ativar algo para ele funcionar ou não?

Nào precisa ativar nada. De resto, definitivamente não é o paging o responsável, talvez o buffer, durante transferência de arquivos grandes.

O sistema não tem custo algum para descartar cache quando preciso, se necessário ele vai descartar todo o cache se um programa pedir. É mais provável que você tenha algo no seu sistema “inflando”, um database ou algo do gênero. Enfim… Não aconselho sair mudando configurações do kernel por causa de feelings. :shushing_face: O que você fez foi dizer o para o kernel, enquanto eu não estiver usando a RAM eu quero ela vazia, mesmo que possa ser útil usá-la com coisas que podem ser descartadas sem rodeios.

2 curtidas

Quando reinício o PC ele volta para 100.

Cache é para melhorar o desempenho do sistema quanto mais cache tiver mais rápido o sistema sera.
O acesso ao HD é mais lento que o da RAM é ai que entra a cache mandando dados do HD para a RAM.

Só uma observação, esse comando limpa o cache de pacotes deb, e não na RAM. :slight_smile:

1 curtida

OFF TOPIC

Essa passagem me faz lembrar uma vez na casa da minha tia, quando ela fez um bolo de brigadeiro. Cada um pegou um pedaço. Foi quando alguém quis guardar o que sobrou que ela falou: “Mas tira a espátula porque ela está suja de brigadeiro!” Eu prontamente gritei: “Suja de brigadeiro? Dá aqui que eu limpo!”
Moral da história: RAM suja de cache? Pode deixar aqui no meu computador!

3 curtidas

Na resposta que você marcou como solução está como deixar permanente.

1 curtida

É, infelizmente as coisas se dão da seguinte forma as vezes: “Vou seguir suas dicas doutor, menos quando você me diz que não é boa ideia fazer o que o senhor me explicou”. ¯_(ツ)_/¯

1 curtida