O free
comando do Linux exibe a quantidade de memória do seu computador em uso e a quantidade ainda disponível para uso dos programas. Sua saída pode ser confusa para os não iniciados, mas mostraremos como entendê-la.
Índice
O comando grátis
O free
comando imprime um resumo rápido do uso de memória em uma janela de terminal. ele não tem muitas opções ou truques na manga, e não demorou muito tempo ou esforço para aprender a usá-lo. Aprender a interpretar corretamente as informações que ele fornece, entretanto, é outra história. É muito fácil ficar confuso com o que free
está lhe dizendo.
Em parte, isso se deve à terminologia – como a diferença entre “gratuito” e “disponível” – e em parte é devido ao funcionamento interno da memória e das rotinas de gerenciamento do sistema de arquivos do kernel do Linux. Se você tiver memória sobressalente para que o kernel possa fazer bom uso, ele a pegará emprestada para seus próprios fins. Até você precisar de volta.
Vamos mergulhar nos mecanismos subjacentes e nas rotinas de dados para que você possa avaliar o que está acontecendo por baixo do capô e como tudo isso afeta o uso de sua memória de acesso aleatório (RAM).
As colunas gratuitas
Vamos free
começar sem opções e ver o que temos:
livre
Isso está enrolado de uma forma feia. No seu computador, você poderá esticar a janela do terminal. Aqui está a saída em uma tabela mais organizada:
total usado grátis compartilhada buff / cache disponível Mem: 2038576 670716 327956 14296 1039904 1187160 Troca: 1557568 769096 788472
Os números são dados em kibibytes , que são 1024 bytes. No Manjaro, o free
comando tem o alias de free -m
. Isso força o free
uso de mebibytes , que são 1.048.576 bytes. Em outras distribuições, o padrão é kibibytes.
Os relatórios da linha superior sobre a memória do sistema, os relatórios da linha inferior sobre o espaço de troca. Vamos apresentar as colunas aqui e, em seguida, examiná-las com mais detalhes em breve. As colunas da linha de memória são as seguintes:
- Total : A quantidade total de RAM física instalada em seu computador.
- Usado : Calculado por
Total
– (Free
+Buffers
+Cache
). - Livre : a quantidade de memória não utilizada. Por que o Total não = Usado + Grátis? Explicaremos isso em breve.
- Compartilhada : memória que é usada pelo
tmpfs
sistema de arquivos. - Buff / cache : Memória usada para buffers e cache.
- Disponível : Esta é uma estimativa da memória que está disponível para atender às solicitações de memória de aplicativos, qualquer outro software em funcionamento em seu computador, como seu ambiente de área de trabalho gráfico e comandos do Linux.
Para a linha de troca, as colunas são:
- Total : o tamanho da partição ou arquivo de troca.
- Usado : a quantidade de espaço de troca em uso.
- Livre : o espaço de troca restante (não utilizado)
A ampla tela
Para separar as Buff/cache
figuras em suas próprias colunas, use a -w
opção (larga):
free -w
Esse é o resultado. Em vez de uma Buff/cache
coluna, temos uma Buffers
coluna e uma Cache
coluna. Aqui estão os números em uma tabela:
total usado cache de buffers compartilhados grátis disponível Mem: 2038576 683724 265708 14660 94568 994596 1160420 Troca: 1557568 761416 796152
Vamos ver o que representam os números nas colunas.
A Coluna Total
Este é o mais simples. É a quantidade de RAM que você instalou na placa-mãe. Este é o recurso precioso pelo qual todos os processos em execução estão lutando. Pelo menos eles estariam lutando se o kernel não estivesse arbitrando.
Aliás, o local de onde free
reúne suas informações é o /proc/meminfo
pseudo-arquivo. Você mesmo pode examinar este arquivo com o seguinte comando:
menos / proc / meminfo
A saída é uma única lista de nomes e valores.
A coluna usada
É aqui que começa a ficar interessante.
A Used
figura representa o que você provavelmente espera, além de um monte de outras coisas. Esta é a memória que é alocada para processos, tomada por programas do usuário e usada por coisas como os ambientes de desktop GNOME ou KDE . Sem surpresas aí. Mas também inclui os números Buffers
e Cache
.
A RAM que não está sendo usada para algo é RAM desperdiçada. O kernel usa RAM sobressalente para armazenar caches e buffers que permitem operar com mais eficiência. Portanto, esta RAM está sendo usada para algo pelo kernel, mas não por nada no espaço do usuário .
Se for recebido um pedido de memória que só pode ser atendido pela renúncia de parte da RAM que o kernel está usando para seus próprios dispositivos, então é o que acontece, perfeitamente. Liberar essa RAM e usá-la para outros aplicativos não afetará o funcionamento correto do sistema Linux – nada vai quebrar – mas pode afetar o desempenho do sistema.
Portanto, esta coluna realmente significa “toda a RAM que está em uso por algo, mesmo que possa ser recuperada instantaneamente”.
A Coluna Livre
Esta coluna contém o valor da quantidade de RAM que não está sendo usada por nada. Como a Used
coluna contém os números de Buffers e Cache, não é incomum que sistemas Linux em perfeito funcionamento tenham muito pouca RAM listada como “livre”.
Isso não é necessariamente uma coisa ruim e quase certamente significa que você tem um sistema funcionando perfeitamente normal que está regulando o uso de RAM corretamente. Ou seja, a RAM está sendo usada por aplicativos e outros processos de espaço do usuário e pelo kernel em seus esforços para tornar o desempenho de seu computador o melhor possível.
A coluna compartilhada
A figura na Shared
coluna representa a memória dedicada a manter tmpfs
sistemas de arquivos baseados em RAM . Esses são sistemas de arquivos criados na memória para facilitar o funcionamento eficiente do sistema operacional. Para ver quais tmpfs
sistemas de arquivos estão presentes, use o df
comando .
As opções que estamos usando são:
-h
(humano): Use unidades sensíveis e de melhor ajuste.--total
: Exibe uma linha com os totais na parte inferior da saída.--type=tmpfs
: Relate apenas nostmpfs
sistemas de arquivos.
df -h --total --type = tmpfs
A primeira coisa que o atinge quando você olha para esses valores é que eles são muitas vezes maiores do que a figura na Shared
coluna. Os tamanhos mostrados aqui são os tamanhos máximos desses sistemas de arquivos. Na realidade, cada um deles ocupa apenas a memória de que precisa. A figura na Shared
coluna é a única a acreditar no uso da memória.
O que esses sistemas de arquivos contêm? Aqui está uma análise rápida:
- / run : contém muitos arquivos temporários, como arquivos PID , diário do systemd que não precisa ser preservado nas reinicializações, informações relacionadas a soquetes de domínio Unix , FIFOs e gerenciamento de daemons .
- / dev / shm : Isso permite a implementação de gerenciamento de memória compatível com POSIX no Debian e distribuições Linux derivadas do Debian.
- / run / lock : contém arquivos de bloqueio. Eles são usados como indicadores para permitir que o sistema saiba que um arquivo ou outro recurso compartilhado está em uso. Eles contêm o PID do processo usando aquele recurso.
- / sys / fs / cgroup : Este é um elemento central do esquema que gerencia os grupos de controle . Os processos são organizados em grupos hierárquicos de acordo com os tipos de recursos que usam. Permite que o uso dos recursos pelos processos sejam monitorados e limitados.
- / run / user / 121 : Esta é uma pasta criada por pam_systemd para armazenar arquivos temporários para um usuário. Nesse caso, o usuário tem um ID 121. Observe que o “usuário” pode ser um usuário normal, um daemon ou algum outro processo.
- / run / user / 1000 : Esta é uma pasta
created
de pam_systemd para armazenar arquivos temporários para este usuário, que tem o ID de usuário 1000. Este é o usuário atual, usuário dave.
As colunas do buffer e do cache
As colunas Buffer
e Cache
só aparecem se você tiver usado -w
(largo). Sem a w
opção – , os números dessas duas colunas são combinados na Buff/cache
coluna.
Essas duas áreas de memória interagem e dependem uma da outra. A área de cache contém (principalmente) dados que foram lidos do disco rígido . Ele é retido no caso de você precisar acessá-lo novamente. É mais rápido extrair os dados do cache do que lê-los do disco rígido. O cache também pode conter dados que foram modificados, mas ainda não gravados de volta no disco rígido, ou valores que foram calculados e ainda não foram salvos em um arquivo.
Para controlar os vários fragmentos de arquivo e stashes de dados, o kernel constrói um índice para a área de memória cache, na área de memória de buffers. Buffers são partes da memória que contêm o bloco de disco e outras estruturas de informação. Eles contêm dados sobre os dados mantidos na área de memória cache. Portanto, os buffers são metadados para o cache.
Quando uma solicitação de leitura de arquivo é feita, o kernel lê os dados nas estruturas de dados do buffer procurando o arquivo ou fragmento de arquivo que foi solicitado. Se for encontrado, o pedido é atendido a partir da área de memória cache apontada pelas estruturas de dados do buffer. Se não estiver presente no cache – e também não estiver nos metadados na área de memória dos buffers – o arquivo é lido do disco rígido.
As estruturas na área de memória buffer são:
- Cabeças do buffer : cada buffer é descrito em um bloco de dados denominado cabeçalho do buffer . Além disso, se os dados no bloco forem alterados e a página de memória associada “suja”, o descritor rastreia a necessidade de gravar os dados de volta no disco rígido.
- Inodes : os Inodes contêm metadados sobre arquivos e diretórios , incluindo onde eles estão no disco rígido (ou sistema de arquivos virtual), o tamanho do arquivo e os carimbos de data / hora do arquivo.
- Dentries : um dentry (entrada de diretório) é uma estrutura que contém informações de listagem de diretório . Pense nisso como uma lista de inodes para os arquivos e diretórios dentro de um diretório.
Você pode ver por que faz sentido condensar a memória usada para as áreas de buffer e memória cache em uma única Buff/cache
coluna. Eles são como duas partes da mesma coisa. A área de memória cache seria inútil sem a área de memória buffer fornecendo um índice para seu conteúdo.
A coluna disponível
A coluna disponível é a soma da Free
coluna mais as partes das Buffers
colunas e Cache (ou a Buff/cache
coluna) que podem ser abandonadas imediatamente . A Available
coluna é uma estimativa, não um número exato. É uma estimativa informada e precisa, mas não deve ser considerada tão precisa até o último byte.
Alterando as unidades de exibição
Para alterar as unidades que exibem as figuras gratuitamente, use uma das seguintes opções.
- -b : Exibe os valores em bytes.
- -k : Exibe os valores em kibibytes (que é o padrão).
- -m : Exibe os valores em mibibytes.
- -g : Exibe os valores em gibibytes.
- -h : Exibe os valores em unidades sensíveis de melhor ajuste (legíveis).
Por exemplo, para usar valores legíveis por humanos, use a -h
opção:
livre -h
free
usará a unidade mais apropriada para cada valor. Como você pode ver, alguns dos valores são exibidos em MiB e alguns em GiB.
Exibindo um total
A --total
opção livre causa para apresentar uma linha total que resume os valores a partir dos Total
, Used
e Free
colunas do MAM e Swap
linhas.
free -h --total
A opção de contagem
A -c
opção (contagem) diz free
para correr um certo número de vezes, com uma pausa de um segundo entre cada uma. Para free
executar duas vezes, use este comando:
free -h -c 2
Executando gratuitamente continuamente
Se você quiser ver o efeito de um determinado aplicativo no uso da memória, pode ser útil free
executá-lo continuamente. Isso permite que você execute free
em uma janela de terminal enquanto inicia, usa e fecha o aplicativo que está investigando.
A -s
opção (segundos) determina a duração da pausa entre cada execução de free
. Para ter uma execução gratuita continuamente com uma pausa de três segundos entre cada atualização, use este comando:
free -s 3
Pressione Ctrl+C
para interromper o processo e retornar ao prompt de comando.
Combinando as opções de contagem e segundos
Para free
executar com uma pausa especificada entre cada atualização, mas parar após um certo número de relatórios, combine as opções -s
(segundos) e -c
(contagem). Para ter free
executado cinco vezes com uma pausa de dois segundos entre cada atualização, use este comando:
free -s 2 -c 5
Depois que as cinco atualizações aparecerem, o processo será encerrado automaticamente e você retornará ao prompt de comando.
Separando memória baixa e alta
Isso é de pouca utilidade hoje em dia, mas se você estiver executando o Linux em um computador de 32 bits, pode ser útil. Ele separa o uso de memória de memória baixa e memória alta.
Em um sistema operacional baseado em Linux de 32 bits, a CPU pode endereçar um máximo de 4 GB de memória. A memória é dividida em memória baixa e memória alta. Pouca memória é mapeada diretamente para a parte do kernel do espaço de endereço. Memória alta não possui mapeamento de kernel direto. A memória alta geralmente está acima de 896 MB.
Isso significa que o próprio kernel (incluindo seus módulos ativos) só pode fazer uso de pouca memória. Os processos do usuário – qualquer coisa que não seja o kernel em si – podem potencialmente fazer uso de memória alta ou baixa.
Em um computador de 64 bits, não haverá valores mostrados para memória alta:
free -h -l
Memórias são feitas disso
Uma rápida recapitulação:
- Total : a quantidade de RAM instalada em seu sistema.
- Usado : igual a
Total
– (Free
+Buffers
+Cache
). - Livre : a quantidade de memória completamente não utilizada por nada.
- Compartilhado : memória ocupada pelos
tmpfs
sistemas de arquivos. - Buffer : as estruturas de dados que são mantidas para fornecer um índice para tudo o que é armazenado
Cache
. - Cache : dados lidos do disco rígido, dados modificados esperando para serem gravados de volta no disco rígido e outros valores computados.
- Disponível : o que é realmente gratuito. Uma estimativa da memória em
Free
,Buffer
eCache
que pode ser usada para atender a uma solicitação de memória.