Linux / Comando free: interpretar memória disponível, cache e swap

free é um comando que fornece um resumo do uso da memória física (RAM, memória de acesso aleatório) e da área de swap em um sistema Linux. A área de swap fornece espaço para páginas de memória e é contabilizada separadamente da RAM residente. Ao determinar se a memória é insuficiente, é melhor primeiro verificar a coluna available, que estima a quantidade que pode ser usada para iniciar novos programas sem recorrer à swap, em vez de considerar a coluna free literalmente.

free -h

O Linux usa RAM não utilizada para coisas como cache de arquivos e a recupera quando necessário. Portanto, você não deve concluir que a memória está baixa apenas porque o valor free é pequeno e buff/cache é grande.

Informações exibidas pelo comando free

free lê /proc/meminfo fornecido pelo kernel para calcular informações sobre a memória física e swap. As definições de cada coluna e opções podem ser encontradas no manual oficial de free do projeto procps-ng.

free -h

A saída tem uma estrutura semelhante à mostrada abaixo. Os números são ilustrativos e arredondados. Neste exemplo, used segue a definição atual total - available; versões diferentes podem usar outras fórmulas. Use os rótulos para interpretar sua própria medição.

               total        used        free      shared  buff/cache   available
Mem:            15Gi       5.0Gi       1.1Gi       320Mi       9.7Gi        10Gi
Swap:          2.0Gi       128Mi       1.9Gi

Entendendo o significado de cada coluna

total, used e free

Coluna Significado Interpretação
total Memória física total utilizável Pode não ser exatamente igual à RAM total instalada. Áreas reservadas pelo kernel e hardware estão excluídas.
used Memória que está em uso ou não imediatamente disponível O manual atual do procps-ng define o valor da linha Mem como total - available. Versões anteriores podem usar outro cálculo; confira free --version e o manual instalado.
free Memória que não é usada para nenhum propósito Não inclui a memória usada como cache que pode ser recuperada.

shared e buff/cache

shared representa principalmente a memória usada por tmpfs, um sistema de arquivos temporário apoiado em memória virtual. buff/cache reúne buffers do kernel, cache de páginas e a parte recuperável do slab, que armazena objetos internos do kernel.

O cache armazena dados lidos do disco na RAM para permitir um novo acesso mais rápido. Se um aplicativo precisar de memória, o kernel pode recuperá-la, então ter um cache grande não é problemático por si só.

Por que available é importante

available é um valor estimado de memória que pode ser usado para iniciar novos aplicativos sem usar swap. Não se trata apenas de somar free + buff/cache, mas de usar as informações do MemAvailable do kernel, que levam em conta o cache de páginas e parte do slab recuperável.

Este valor também não é uma garantia absoluta do uso futuro de memória. Se um aplicativo solicitar repentinamente uma grande quantidade de memória ou se o kernel tiver dificuldade em recuperar memória, a situação pode mudar rapidamente.

Diferença entre as linhas Mem e Swap

Linha de memória física

A linha Mem resume o tamanho total e o uso da RAM real. Inclui diversos usos, como memória de aplicativos, kernel, cache e memória compartilhada.

Linha Swap

Swap mostra a capacidade total, usada e livre da área de swap; essa linha não é uma segunda medição da RAM física. Não se pode concluir que atualmente há falta de memória apenas porque o uso de swap não é 0. Isso ocorre porque páginas inativas que foram anteriormente deslocadas podem permanecer no swap mesmo após a RAM estar disponível.

Por outro lado, se o uso de swap continuar a aumentar, e si e so em vmstat ocorrerem continuamente, e o tempo de resposta piorar, deve-se suspeitar de pressão de memória.

vmstat 1

No vmstat, si indica o volume de memória lido da swap por segundo, e so, o volume enviado à swap por segundo. O primeiro relatório dessas taxas resume o período desde a inicialização; os seguintes refletem o intervalo de amostragem. Observe várias atualizações e pressione Ctrl+C para encerrar.

Opções usadas com frequência

Exibir em unidades legíveis por humanos

free -h

-h ou --human seleciona automaticamente unidades binárias como Ki, Mi e Gi, conforme o valor. Se uma unidade fixa for necessária, use -m para mebibytes (MiB) ou -g para gibibytes (GiB).

free -m
free -g

Visualizar buffers e cache separadamente

free --wide

-w ou --wide separa buff/cache nas colunas buffers e cache. Para analisar a causa detalhada, você também deve observar /proc/meminfo, slabtop e outros.

Exibição repetida em intervalos regulares

free -h -s 2

-s 2 repete a medição a cada 2 segundos até você pressionar Ctrl+C. Combine com -c para limitar o número de relatórios; o próximo exemplo termina após cinco exibições.

free -h -s 2 -c 5

Visualizar memória física total e swap

free -h --total

-t ou --total adiciona uma linha com os totais das colunas. Como RAM e swap têm desempenhos e funções diferentes, não interprete apenas o total como a memória de alta velocidade realmente disponível.

Como avaliar a falta de memória

Observar a memória disponível e a entrada e saída da swap

É melhor observar os seguintes sinais em vez de apenas uma única saída do free.

  • Se o available continua abaixo do normal
  • Se o uso de swap está aumentando
  • Se si e so em vmstat ocorrem continuamente
  • Se o tempo de resposta do serviço e a entrada/saída do disco se deterioram juntos
  • Se o log do kernel registra encerramentos por falta de memória (OOM, de Out of Memory)

Execute as linhas abaixo separadamente. vmstat 1 continua em primeiro plano até Ctrl+C; encerre-o antes de consultar o journal.

free -h
vmstat 1
journalctl -k -g 'oom|Out of memory|Killed process'

Em sistemas com systemd, journalctl -k seleciona mensagens do kernel da inicialização atual. A opção -g usa expressões regulares compatíveis com Perl; | expressa alternativas, sem barra invertida. Consulte o manual de journalctl. A consulta pode não encontrar ocorrências por causa do período, da retenção ou das permissões; a ausência de resultados não comprova que nunca houve OOM.

Encontrando processos que usam muita memória

No ps do procps-ng, você pode ordenar pelo uso de memória para verificar os principais processos.

ps -eo pid,user,%mem,rss,comm --sort=-rss | head

RSS (Resident Set Size, tamanho residente) mede a memória física residente do processo; o campo rss desse ps é expresso em KiB, não em número de páginas. Páginas compartilhadas podem ser contadas em vários processos. A ordenação acima usa RSS em ordem decrescente. Para analisar compartilhamento e contêineres, considere também métricas de cgroup (control group, grupo de controle de processos) e ferramentas como smem.

Evite limpar o cache sem necessidade

O cache de página é gerenciado pelo kernel para melhorar o desempenho do sistema. Forçar o cache a ser limpo para tornar os números em free menores pode aumentar as leituras do disco e, na verdade, reduzir o desempenho. Execute isso apenas quando houver um propósito claro, como um teste de desempenho reproduzível, e quando você entender o impacto e os métodos de recuperação.

Pontos a considerar para unidades e automação

Unidades binárias e unidades decimais

A exibição padrão de -h usa a série KiB, MiB, GiB baseada em 1024. Usar --si utiliza a série kB, MB, GB baseada em 1000.

free -h --si

Misturar diferentes unidades em documentação ou monitoramento pode criar discrepâncias, portanto, especifique o padrão.

Evite interpretar a saída formatada como dados estruturados

As colunas e métodos de cálculo de free podem variar de acordo com a versão do procps-ng, e unidades legíveis para humanos não são adequadas para análise. Em automação, se possível, use as entradas necessárias de /proc/meminfo ou métricas estruturadas fornecidas por agentes de monitoramento, e fixe as unidades e a versão esperadas.

Por que os valores de free aparecem grandes em contêineres

free lê /proc/meminfo. Dependendo do runtime de contêineres e da configuração de cgroup, este arquivo pode mostrar valores próximos à memória total do host, que podem diferir dos limites reais de memória aplicados ao contêiner.

Ao determinar a capacidade disponível de um contêiner, verifique as solicitações de recursos (requests) e os limites (limits) do orquestrador, o limite e o uso atual de memória no cgroup, além dos eventos OOM.

O cgroup organiza processos e controla seus recursos. No cgroup v2 correspondente ao processo, memory.current mostra o uso, memory.max define o limite principal e memory.events informa eventos como OOM. O valor max significa que esse arquivo não impõe um limite numérico, mas ainda pode haver restrições em grupos ancestrais. Consulte a documentação de memória do cgroup v2. Não deduza a capacidade do contêiner apenas pelo free do host.

Perguntas frequentes

Um valor free próximo de zero significa falta de memória?

Não necessariamente. Quando o Linux usa a memória restante como cache, free pode ser pequeno. Verifique available, entrada/saída da swap e desempenho do serviço juntos.

Toda a memória buff/cache é recuperável?

Parte dessa memória pode ser recuperada quando necessário, mas nem toda ela pode ser liberada imediatamente. available é uma estimativa que considera essa diferença, então é melhor não simplesmente adicionar todo o buff/cache como memória livre.

Usar swap sempre significa que a RAM é insuficiente?

Não. Páginas inativas do passado podem permanecer no swap. Você precisa verificar a tendência de aumento do uso de swap, juntamente com a entrada/saída real do swap e atrasos.

Por que used difere entre ferramentas?

A forma como a memória cache e recuperável é classificada pode variar dependendo da ferramenta e da versão. Compare o /proc/meminfo no mesmo ponto no tempo, a versão do procps-ng e as definições de cada ferramenta.

Resumo

free -h é um comando básico para verificar rapidamente o status da RAM e do swap. Para determinar a falta de memória, você não deve olhar apenas para a coluna free, mas considerar available, entrada/saída de swap, uso de processos e atrasos de serviços juntos.

Se a carga estiver alta ao mesmo tempo, consulte como interpretar a carga média usando o comando uptime para também verificar gargalos de CPU e E/S.