O comando free do Linux é muito útil para se observar e monitorar o uso da memória do sistema, mas ao mesmo tempo ele gera muitas dúvidas pois usa conceitos que são desconhecidos pela maioria dos usuários e administradores de sistemas.
Nesse artigo vamos esclarecer um pouco melhor o que é considerado pelo comando e como ele deve ser interpretado.
Fonte das Informações
Primeiramente é importante saber que o comando usa como base principal as informações contidas no arquivo /proc/meminfo, gerado dinamicamente pelo kernel. Com base nesses dados são feitos alguns cálculos e é gerada a saída ao usuário.
As Principais Opções do Comando
Ao utilizar o comando sem nenhuma opção, as informações serão exibidas em kilobytes, o que dificulta um pouco a leitura dos valores. Devido a isso é comum o uso das seguintes opções:
- free -m: Os valores são exibidos em Megabytes
- free -g: Os valores são exibidos em Gigabytes
- free -h: Modo “humano”, ou seja, mostra em Mega ou em Giga
- Existem outras opções para bytes, Terabytes, Petabytes e etc, mas as mais comuns são mesmo -m e -g
Outra opção útil é o -w que basicamente vai separa o buffers do cache, que normalmente são exibidos junto.
O Significado de Cada Campo
Para tirar suas conclusões sobre o uso da memória, normalmente os usuários olham apenas para os campos Total, Used (Usado) e Free (Livre), e aí mora um problema, principalmente com relação ao entendimento do que é considerado como “Usado” e do que é considerado como “Livre” pelo sistema.
Veja abaixo uma saída do comando “free -m”. Essa é a saída mais comum nas versões atuais do kernel Linux:
Focando apenas no uso da memória, não no Swap que ficará para outro artigo, vamos então entender melhor o significado de cada um desses campos:
- Total: Nesse não há segredos, é o total de memória RAM disponível no sistema, usado ou não.
- Shared: É a memória que está sendo utilizada de maneira compartilhada por diferentes aplicações no sistema, ou seja, diferentes aplicações acessando o mesmo espaço de memória. No Linux é normalmente relacionada às aplicações que usam os filesystems tmpfs, é também bastante utilizado em ambientes de virtualização. Entenda mais sobre memória compartilhada nesse link.
- Buffers: Espaço de memória usado para buffers do kernel, visando melhorar a performance de processamento e alterações de metadados.
- Cache: Tem basicamente o mesmo conceito dos Buffers. Como o acesso à RAM é mais rápido que o acesso ao disco, o kernel faz a implementação de um sistema de cache para que a leitura frequente de dados do disco ocorra com melhor performance, através do uso de um espaço de cache de memória, também chamado de “Page Cache“.
- Free: Espaço de memória que está completamente sem uso, nem por aplicações, nem pelo kernel, shared, buffers ou cache.
- Used: É simplesmente o resultado da conta: Used = Total – Free – Buffers – Cache
- Available: É uma estimativa (uma conta interna) de quanta memória está disponível, sem o uso do espaço de swap, para ser utilizada por novas aplicações que se iniciem ou por aplicações em execução que necessitem de mais memória. Note que o Available considera que em caso de necessidade, o sistema pode realocar espaços de memória que estão atualmente sendo utilizados pelas implementações de Buffers e Caches, levando em conta que o uso da memória pelas aplicações tem prioridade ao uso da memória para melhoria de performance. Dessa forma, o espaço em Available será sempre maior que o Free.
Espaço de Memória Disponível no Linux
Entendendo as definições acima, fica mais claro de entender que para se observar quanto de memória RAM está disponível no sistema, para uso das aplicações, deve-se olhar para o campo Available, e não para o Free.
Espero que o artigo ajude a esclarecer essa dúvida bem comum aos usuários, analistas e administradores de sistemas Unix/Linux.
Ricardo, boa noite!
Em algumas distribuições o campo available não aparece né? No CentOS 7 (distro que uso na empresa) ele aparece. Aqui em casa no Debian ele não aparece.
Olá Felipe,
No seu caso então você deve observar a linha “-/+ buffers/cache”. Nessa linha ele retira(-) do valor Used os buffers e caches e inclui(+) na coluna Free os valores de buffers e cache, que também podem vir a ser usados pelas aplicações. Não é exatamente a mesma coisa que o Available atual, mas é bem próximo.