Grátis / em cache / Memória disponível no Linux

6

Eu tenho lido que o linux usa memória livre para fazer cache, para tornar o sistema mais rápido. No entanto, tanto o Nagios quanto o sistema de monitoramento Paessler PRTG mostram que meu uso de memória é crítico.

Eu poderia mudar o script Nagios mem_usage para somar memória livre e armazenada em cache, mas isso seria uma informação correta? Eu duvido que eles tenham entendido mal o uso da memória do Linux.

Digamos que eu tenha 8 GB de RAM. 5 GB são usados, 2 GB são armazenados em cache e eu tenho 1 GB de memória livre. A memória real disponível deve estar livre + em cache (3 GB)? Se algum novo aplicativo necessitar de 3 GB de RAM adicionais, ele poderia levar tudo do cache e livre sem usar swap, ou há um mínimo que deveria estar no cache?

Exemplo real:

$ cat /proc/meminfo
MemTotal:        5984256 kB
MemFree:          137052 kB
Buffers:          140484 kB
Cached:          3439616 kB
SwapCached:          244 kB
Active:          3148824 kB
Inactive:        2341768 kB
...

Minhas ferramentas de monitoramento mostram que eu tenho 137 MB de RAM livre, no entanto, tenho ~ 3,5 GB no Cache.

Obrigado!

    
por pkoraca 02.06.2012 / 13:55

5 respostas

12

Eu tive a mesma experiência no Nagios quando usei o plugin check_mem.pl. Quando você define o tress hold para critical, você precisa usar um capital C em vez de um c normal.

Assim:

command[check_mem]=/usr/lib/nagios/plugins/check_mem -w 10 -C 5 -f

Em seguida, ele leva em conta a memória em cache e não enviará avisos.

    
por 02.06.2012 / 14:13
3

Freemem é uma memória não alocada que está imediatamente disponível. Isso é usado ao iniciar programas e normalmente você terá problemas se isso ficar muito baixo. O monitoramento para garantir que você tenha alguns MB livres deve ser suficiente. Eu monitora para 1 MB no meu roteador de 32 MB OpenWrt e 10 MB no meu Ubuntu. Eu também monitore o uso de swap, pois isso diminuirá à medida que a carga de memória aumentar.

Quando os programas são iniciados, eles geralmente não usam toda a memória requerida inicialmente. É comum que o tamanho virtual de um programa seja muito maior que o tamanho residente (na memória). A memória restante pode ser alocada a partir do disco (código da imagem do programa e das bibliotecas que ela utiliza) e swap (alocada mas não usada).

Você provavelmente verá problemas significativos de desempenho se a memória armazenada em cache ficar muito baixa. Dependendo de como a troca é codificada e configurada, é provável que as páginas inativas sejam trocadas para criar espaço para o seu programa. Isso geralmente resulta em menos troca de página do que o esperado.

Eu monitoraria a memória em cache para garantir o desempenho dos programas em execução, em vez de garantir que a memória esteja disponível para iniciar programas enormes.

    
por 03.06.2012 / 08:55
1

Você deveria ter colocado toda a saída do meminfo. As páginas sujas são armazenadas em disco, mas são contadas como pagecache e devem ser liberadas para o disco com base nos requisitos.

Em suma, o que você está dizendo está certo. Ao calcular a memória livre, leve em consideração também o cache e o buffer, mas mantenha as páginas sujas de lado para o cálculo.

E para garantir que você nunca fique sem memória, mantenha uma conta no valor Committed_AS. Com base nesse valor, você deve determinar se deve aumentar a RAM ou diminuir a carga de trabalho.

    
por 09.06.2012 / 15:43
1

Você não parece ter nenhum problema de memória. Eu acredito que a carga de trabalho de ambos os sistemas é a mesma, certo. Em caso afirmativo, sob circunstâncias quase equivalentes, eles consumirão a mesma quantidade de memória armazenada em cache.

Você parece estar bem com a parte committed_AS também. No segundo sistema, não há muita memória em cache porque não há necessidade. Sendo um sistema de gerenciamento de memória virtual baseado em demanda, o Linux funciona muito bem com a memória. A memória cache é aumentada à medida que a carga de trabalho do sistema aumenta.

    
por 11.06.2012 / 19:24
-1

O Linux usa a memória disponível para cache e a limpa sempre que necessário. Você pode liberar a memória em cache sempre que quiser, executando

sync; echo 3 > /proc/sys/vm/drop_caches

    
por 11.06.2012 / 19:39