Por que meu servidor mostra
total used free shared buffers cached
Mem: 12286456 11715372 571084 0 81912 6545228
-/+ buffers/cache: 5088232 7198224
Swap: 24571408 54528 24516880
Eu não tenho idéia sobre como calcular a memória no linux. Eu acho que diz que 5088232 é usado onde 7198224 é gratuito, o que significa que na verdade está consumindo 5 GB de RAM?
Significado dos valores
A primeira linha significa:
total
: Sua RAM total (física) (excluindo um pequeno bit que o kernel reserva permanentemente para si na inicialização); é por isso que mostra ca. 11,7 GiB e não 12 GiB, que você provavelmente tem.used
: memória em uso pelo SO.free
: memória não está em uso.shared
/buffers
/cached
: Isso mostra o uso de memória para fins específicos, esses valores estão incluídos no valor deused
.A segunda linha fornece os valores da primeira linha ajustados. Ele fornece o valor original para
used
menos a somabuffers+cached
e o valor original parafree
mais a somabuffers+cached
, daí seu título. Esses novos valores costumam ser mais significativos do que os de primeira linha.A última linha (
Swap:
) fornece informações sobre o uso do espaço de troca (ou seja, o conteúdo da memória que foi temporariamente movido para o disco).Fundo
Para realmente entender o que os números significam, você precisa de um pouco de conhecimento sobre o subsistema de memória virtual (VM) no Linux. Apenas uma versão curta: Linux (como a maioria dos sistemas operacionais modernos) sempre tentará usar RAM livre para armazenar coisas em cache, então
Mem: free
quase sempre será muito baixo. Portanto, a linha-/+ buffers/cache:
é mostrada, pois mostra quanta memória está livre ao ignorar os caches; os caches serão liberados automaticamente se a memória ficar escassa, então eles realmente não importam.Um sistema Linux está realmente com pouca memória se o
free
valor na-/+ buffers/cache:
linha ficar baixo.Para mais detalhes sobre o significado dos números, veja, por exemplo, as perguntas:
Mudanças nos procedimentos 3.3.10
Observe que a saída de
free
foi alterada no procps 3.3.10 (lançado em 2014). As colunas relatadas agora são "total", "usado", "livre", "compartilhado", "buff/cache", "disponível" e os significados de alguns dos valores foram alterados, principalmente para melhor contabilizar o slab do kernel Linux cache.Veja o relatório Debian Bug #565518 para a motivação, e O que significam as mudanças na
free
saída de 14.04 para 16.04? para mais informações detalhadas.A resposta atualmente aceita de 2009 está desatualizada. É importante certificar-se de que as informações que você está obtendo estão corretas e correspondem à versão de
free
(distribuída no pacote Debianprocps
ou equivalente em sua distribuição). Também é útil observar a saída deman free
, e tambémman 5 proc
, que contém informações sobre/proc/meminfo
, o arquivo de ondefree
obtém seus dados no Linux.Por padrão,
free
a saída de 's está em kibibytes (1 kibibyte = 1024 bytes), como você pode ver na página de manual. Eu prefiro usar o-h
argumento, que mostra sufixos, assim:A primeira linha
Mem
significa:total
(Mem): memória total instalada (ou seja ,MemTotal
de/proc/meminfo
), é toda a memória na RAMused
(Mem): memória usada, igual atotal - free - buffers - cache
free
(Mem): memória não utilizada (ou sejaMemFree
), é toda a memória que não é usada para nada (até caches) na RAMshared
(Mem): esta é a quantidade de memória usada principalmente paratmpfs
(Shmem
)buff/cache
(Mem), soma debuffers
ecache
:buffers
: memória usada pelos buffers do kernel (Buffers
), que é a memória que o kernel pode aproveitarcache
: memória usada pelo cache de página e slabs (Cached
eSReclaimable
). O cache de página contém o conteúdo dos arquivos no sistema de arquivos armazenados em cache na RAM, e geralmente é bom que esse número seja alto. Presumo que "slabs" sejam um recurso de cache semelhante.available
(Mem): esta é uma estimativa de quanta memória está disponível para iniciar novos aplicativos, sem troca. Inclui a maior parte da memória contada nocache
campo (já que o cache de página pode ser descartado para iniciar novos aplicativos), mas não conta a troca (já que geralmente é preferível não usar espaço de troca lento).A segunda linha é
Swap
. Esta é a minha explicação:total
(Swap): esta é a quantidade total de espaço em disco reservado para swap (SwapTotal
emproc/meminfo
). Você pode verificar verificando se isso corresponde à saída deswapon -s
.used
(Trocar): a quantidade de espaço em disco de troca que está sendo usado no momento. Novamente, você pode verificar isso comparando-o com a saída deswapon -s
free
(Swap): a quantidade de espaço em disco de swap que não está sendo usado no momento (SwapFree
em/proc/meminfo
). É igual atotal (Swap) - used (Swap)
A linha buffers/cache mostra quanta memória é usada pelos programas (primeira dessas colunas) e está livre para os programas usarem (segunda coluna). É um número bastante esotérico, e não é algo que você realmente olharia muito na prática.