Por que meu sistema usa muito cache?

4

Anteriormente, no meu computador desktop com o Ubuntu 14.04, eu tinha 4 GB de RAM, o que eu achava que deveria ser suficiente. No entanto, depois de um tempo, meu computador parece ficar lento. Eu tenho um aplicativo de monitor de recursos do sistema no meu painel Gnome, que eu assumo representa a RAM disponível (?). Ela mostra uma área verde escura como "Memória" e uma área verde clara como "Cache". O "Cache" iria crescer lentamente até preencher todo o gráfico, e então os programas demorariam a carregar, ou levaria algum tempo para mudar de programa.

Eu poderia aliviar o problema com este comando, mas eventualmente o cache do computador fica cheio novamente, então é apenas um bandaid:

sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"

Então, imaginei que conseguiria mais RAM, então substituí um bastão de 2 GB por um de 8 GB e agora tenho 10 GB de RAM.

E o meu "cache" ainda aumenta lentamente e o meu computador fica mais lento. Além disso, às vezes o computador começa com "cache" no máximo quando eu inicializo e efetuo login. Nem sempre, não sei se há um padrão que determina por que isso acontece.

Por que o Ubuntu está usando tanto cache? 10GB não é suficiente para o Ubuntu?

Aqui está o aspecto do meu monitor de sistema no meu painel do Gnome. O quadrado do meio mostra o uso da RAM. A área verde claro é o "cache":

Este é meu histórico de memória e troca, que não parece incluir nenhuma informação sobre "cache". Eu percebo que não estou totalmente claro sobre a diferença entre "cache" e "swap":

    
por Questioner 11.06.2014 / 04:51

3 respostas

8

Você provavelmente precisa reduzir seu swappiness.

O kernel considera melhor usar o RAM livre como cache, em vez de remover páginas de cache e ter o RAM marcado como verdadeiramente livre. O crescimento do cache geralmente é bom.

Agora surge a pergunta sobre o que fazer quando toda a memória é alocada para o cache e seu aplicativo precisa de mais memória. Muitas vezes, a coisa certa a fazer é despejar uma página do cache e entregá-la ao seu aplicativo, mas ocasionalmente é vantajoso trocar uma página raramente usada, dar isso ao seu aplicativo e manter o cache intacto.

Esse processo é pouco controlado por /proc/sys/vm/swappiness . Para mais informações, por favor, verifique as excelentes respostas para Porque a maioria das pessoas recomendo reduzir o swappiness para 10-20? e Como eu configuro o swappiness? .

    
por sмurf 11.06.2014 / 05:27
5

Seu sistema usa muito cache, porque está disponível para uso e pode ajudar a acelerar.

Em geral, o

Caching é onde colocamos uma cópia de algo que é lento para recuperar ou lento para calcular em algum lugar que é mais rápido recuperar. Um programa pode armazenar o resultado de um cálculo na memória, um proxy da Web pode armazenar uma cópia de um recurso da Web em uma máquina em sua LAN e, nesse caso, um sistema pode armazenar dados dos discos rígidos na RAM (e alguns outros dados).

E como o sistema fica mais rápido, faz sentido usar cada kilobyte que não está sendo usado por outra coisa. As opções para um pedaço de memória que nada mais está usando são:

                      |Use For Cache | Don't Use For Cache
——————————————————————+——————————————+————————————————————
Data needed again     |Faster system | No difference
Data not needed again |No difference | No difference

Portanto, você deve sempre usar cada bit de memória que não esteja fazendo nada pelo cache.

Um sistema que tem 10% da RAM em uso para várias coisas, e 90% dele em uso para cache não deve ser considerado como "maximização". Deve ser considerado como 10% em uso, com outros 90% livres e, portanto, sendo usado para cache, enquanto nada precisar dele.

No entanto, se considerarmos a troca, isso é quase o oposto do armazenamento em cache de dados do disco na RAM: Onde o cache usa RAM para acelerar a E / S (e potencialmente outras coisas), a paginação usa espaço em disco para estender a RAM. / p>

Então, quando o sistema tem toda a sua RAM sendo usada e precisa de mais, tem duas opções:

  1. Jogue fora parte do cache, já que é apenas uma otimização.
  2. Imprima algumas RAM sendo usadas para outra coisa.

Não há resposta universal para apenas qual deles é o melhor. A resposta perfeita depende de um monte de coisas que não podem ser previstas, e mesmo a melhor resposta depende de um monte de coisas que dependem do seu sistema configurado e como você o usa.

Observe que essas ações opostas fazem sentido ao mesmo tempo: uma é priorizar as informações de baixa velocidade que você provavelmente precisará, a outra é sobre priorizar as informações de que você não precisará em breve.

250 MB não é muito, então eu não ficaria muito preocupado, mas para um sistema desktop de alta RAM para uso interativo (em vez de servidor), eu poderia experimentar reduzir o swappiness, para mudar o equilíbrio aqui. Esta resposta é muito boa porque provavelmente não fará muita diferença, mas é uma coisa razoável experimentar ver se for.

Você tem um problema muito maior para lidar primeiro, que é que alguém está executando sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches" em sua máquina de vez em quando, o que elimina os dados de acesso rápido a RAM não usada e força o sistema a recalcule ou recupere o que deve ser capaz de pegar da memória. Isso tornará o sistema mais lento e a RAM um desperdício de dinheiro.

    
por Jon Hanna 11.06.2014 / 11:32
4
  

E o meu "cache" continua a aumentar ao máximo e o meu computador fica mais lento.

Você precisará procurar em outro lugar a causa de sua lentidão; a memória descrita como “cache” é a memória que o kernel pode descartar livremente se precisar de mais memória RAM. São coisas como dados recentemente lidos do disco.

Este , embora bastante antigo, ainda é uma descrição razoável de algumas das partes móveis no subsistema de memória. Como se diz,

  

O Linux tem essa regra básica: uma página de RAM livre é a memória RAM desperdiçada.

Não importa quanta memória RAM você tenha, seu cache crescerá para preenchê-lo. Isto não é motivo de preocupação. Longe disso, é uma otimização de desempenho muito significativa - a RAM é cerca de 100 vezes mais rápida do que um SSD rápido , portanto, toda vez que você não precisa ler o disco é uma grande vitória.

    
por RAOF 11.06.2014 / 08:47