Questão Sobre o cache de memória do Linux


Eu estou executando um script python para fazer algumas estatísticas e na verdade a memória que usou é baixa, cerca de 10% .E nenhum outro processo custou mais memória.No entanto, quando eu uso free -m e isso mostra que quase 95% de memória foi usada. O ponto é que o meu script deve fazer muita leitura de arquivos, então eu me pergunto se existe algum mecanismo de cache de memória do Linux que causou o problema?echo 1 >> /proc/sys/vm/drop_caches funciona, mas parece manualmente.Como posso reduzir o custo de memória e não faz um efeito ruim na leitura de arquivos?


4


origem




Respostas:


O kernel do Linux armazena automaticamente os arquivos na memória para eficiência. Isso não é uma coisa ruim. Quando correr free -m você verá à direita a quantidade de memória usada no cache. Se um aplicativo precisar da memória, o kernel liberará parte do cache. Você não deve tentar gerenciá-lo sozinho.


7





Eu não acho que você tenha um problema real aqui.

Por que você se importa quanta memória total está sendo usada? Está doendo alguma coisa?

O Linux tenta usar sua memória da maneira mais eficiente possível. Se você tiver toneladas de memória livre e estiver lendo muitos arquivos, ela usará a memória livre para armazenar esses arquivos em cache. Se você tiver toneladas de memória ativa, usará muito menos memória para o armazenamento em cache. É assim que deve funcionar. Se você não quiser que a memória seja usada, tire os chips do computador.

Existem alguns casos incomuns em que muita cache pode ser ruim. Talvez a explosão de leitura sempre aconteça antes de uma explosão de alocação de memória. Talvez algo sobre o seu caso específico signifique que não há nenhum benefício possível, e você precisa extrair esse último custo de desempenho de 0,1%. Talvez você esteja em um sistema embarcado que usa RAM com uma vida útil limitada. Se você tem esse caso, diga-nos o que é.


5



bem, na verdade o problema é que o script não ocupa muita memória, quase 10%, e minha máquina não faz mais nada. Quando leio os dados na memória, o python tem um MemoryError que mostra que não havia memória suficiente. - cheneydeng