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
availablecontinua abaixo do normal - Se o uso de swap está aumentando
- Se
siesoemvmstatocorrem 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.




