Linux: a memória está livre, mas a troca é usada. Por quê?

11

Aqui estão os diagramas de Munin.

Uso de memória: http://koryagin.com/w/q/memory-day.png

Troque in / out: http://koryagin.com/w/q/swap-day.png

Por que o Linux decide aumentar o cache e usar swap quando o tamanho da RAM é muito maior que a memória usada pelos programas?

Pavel Koryagin
fonte
2
O subsistema de VM linux nos últimos anos foi muito ajustado para favorecer o espaço em buffer e o espaço em cache; os aplicativos que ocupam memória, mas não fazem nada, são embaralhados no disco. Isso aumenta a capacidade de resposta e o desempenho. A menos que você esteja vendo problemas de desempenho, não precisa se preocupar com isso.
Bart Silverstrim

Respostas:

17

Seu servidor provavelmente possui alguns processos que consomem memória e / ou inativos, com muitas páginas inativas. O kernel do Linux prefere trocar partes inativas dos programas para trocar, pois provavelmente a memória é melhor usada como cache.

Se você deseja mudar esse comportamento, brinque com o vm.swappinesssysctl tunable, mas esteja avisado, não é tão fácil superar os desenvolvedores do kernel / mantenedores de distribuição. :-)

Você está tendo problemas de desempenho no servidor durante esse pico de troca ou pediu por curiosidade?

Janne Pikkarainen
fonte
Não tenho problemas de desempenho neste servidor específico. Mas em outro, onde a situação não é tão clara, estou pensando no que fazer. Alguma lógica de gerenciamento de memória do Linux não pode ser o motivo dos segfaults do PHP-FPM, se eles não corresponderem a nenhum dos problemas conhecidos do PHP? Então, geralmente em favor da curiosidade.
Pavel Koryagin 02/09/11
BTW, esse servidor lida intensivamente com uma quantidade muito pequena de dados com um conjunto fixo de scripts, portanto, não deve ter E / S intensiva. Então, por que o Linux quer ter um cache tão grande?
Pavel Koryagin 02/09/11
O Linux armazena em cache pesado arquivos, metadados, entradas de diretório e assim por diante. Experimente o comando slabtop.
Janne Pikkarainen 02/09/11
Muito obrigado. Vai demorar um pouco para entender o que fazer com as slabtopinformações.
Pavel Koryagin 02/09/11
Deixe isso correr em tela cheia quando seu chefe passar pelo seu cubículo e se tornar um guru aos olhos dele. :-) Outro bom comando "ooh, que com certeza parece difícil de entender" está systat -vmstatno FreeBSD (provavelmente outros BSDs também).
Janne Pikkarainen
1

Você deve tentar jogar com o parâmetro swappiness . Como você pode ver o seu sistema começou a trocar quando tentou aumentar o tamanho do cache do arquivo, isso é normal se o swappines não for 0.

Alex
fonte