Como verificar o uso da memória no terminal Linux

Uma janela de terminal em um sistema Linux estilo Ubuntu.
Fatmawati Achmad Zaenuri / Shutterstock

Existem várias maneiras de obter informações básicas sobre o uso de memória em seu sistema Linux. Neste roundup, nós vamos cobrir os métodos de linha de comando mais comumente utilizados:  free, vmstat, e top. Também examinaremos a leitura /proc/meminfodiretamente.

Como o Linux usa RAM

RAM é um recurso finito do qual todos os processos, como aplicativos e daemons, desejam uma parte. Há muito disponível. O kernel avalia as disputas de memória e aloca a memória racionada para todos os processos famintos. É como uma mãe-pássaro com mais bicos abertos apontados para ela do que ela tem vontade.

RAM não utilizada é RAM desperdiçada. O Linux usa qualquer RAM sobressalente  para coisas como espaço de buffer de arquivo , para manter seu computador funcionando com desempenho ideal. É fácil ter a impressão de que a RAM do seu sistema foi consumida por algum processo descontrolado ou vazamento de memória, mas raramente é o caso.

Normalmente é apenas o kernel fazendo seu trabalho tenazmente em segundo plano. Se houver outras demandas de RAM que o kernel escalou para seus próprios dispositivos, ele cederá a memória instantaneamente, portanto, nenhum dano será causado.

Se o kernel decidir que é mais eficiente começar a usar o espaço de troca, ele também o coloca em ação. Há muita confusão sobre o swappinessvalor no Linux e quando o kernel começará a usar swap . Não é verdade que o swappinessvalor define um limite para o uso de RAM que ativa a troca.

Mas agora, vamos dar uma olhada nas diferentes técnicas que você pode usar na janela do terminal para ver o uso de RAM em seu computador Linux.

O comando grátis

O comando free fornece uma tabela de RAM total, usada, livre, compartilhada, buffer / cache e RAM disponível em seu computador. Ele também mostra a quantidade total de espaço de troca configurado e quanto é usado e disponível.

Em nosso exemplo, usaremos a -mopção (mebibytes). No entanto, você também pode usar  -b(bytes), -k(kibibytes) ou -g(gibibytes).

Nós digitamos o seguinte comando:

livre -m

O comando "free -m" em uma janela de terminal.

Esta é a saída que obtemos:

      total usado grátis compartilhada buff / cache disponível
Mem: 1987 901 95 80 990 811
Troca: 1521 651 869

As Memcolunas contêm as seguintes informações:

  • Total : a quantidade total de RAM física neste computador.
  • Usado : a soma de Livre + Buffers + Cache subtraída do valor total.
  • Livre : a quantidade de memória não utilizada.
  • Compartilhado : quantidade de memória usada pelos tmpfssistemas de arquivos.
  • Buff / cache : quantidade de memória usada para buffers e cache. Isso pode ser liberado rapidamente pelo kernel, se necessário.
  • Disponível : esta é uma estimativa da memória que está disponível para atender às solicitações de memória de aplicativos e qualquer outro software operacional em seu computador.

As Swapcolunas contêm as seguintes informações:

  • Total : o tamanho da partição ou arquivo de troca.
  • Usado : a quantidade de espaço de troca que está em uso.
  • Livre : a quantidade de espaço de troca restante (não utilizado).

Você também pode usar o seguinte truque bacana que ajustamos de um de nossos leitores para ver a porcentagem de espaço de troca que é usado:

livre -m | grep Swap | awk '{print ($ 3 / $ 2) * 100}'

O comando "free -m | grep Swap | awk '{print ($ 3 / $ 2) * 100}'" em uma janela de terminal.

O comando vmstat

É impossível ter um bom entendimento de como a RAM é usada em sua máquina Linux sem uma avaliação do estado de seu espaço de swap. A RAM e o espaço de troca funcionam em conjunto.

Você pode usar o vmstatcomando  para dar um mergulho mais profundo em como seu espaço de troca (ou memória virtual) está sendo usado. Ele fornece um relatório sobre uma variedade de estatísticas relacionadas à troca com  base nos valores médios desde a última reinicialização.

Digite o seguinte:

vmstat

O comando "vmstat" em uma janela de terminal.

Esta é a saída sem o contorno:

procs ----------- memória ---------- --- trocar-- ----- io ---- -sistema-- ------ cpu -----
rb swpd free buff cache si so bi bo in cs us sy id wa st
3 0 671488 576084 51088 823876 1 7 53 62 99 14 4 1 95 0 0

Há muitos pontos de dados nesse relatório, então vamos dividi-los:

  • Proc:
    • r : O número de processos “executáveis”. Eles estão executando ou aguardando seu próximo surto de ciclos de CPU dividido pelo tempo.
    • b : O número de processos em hibernação ininterrupta. Eles não estão dormindo, mas realizando uma chamada de sistema de bloqueio. Eles não podem ser interrompidos até que concluam sua ação atual. Normalmente, esse processo é um driver de dispositivo aguardando a liberação de algum recurso. Quaisquer interrupções enfileiradas para esse processo são tratadas quando o processo retoma sua atividade normal.
  • Memória:
    • swpd : a quantidade de memória virtual usada, ou seja, quanta memória foi trocada.
    • livre : a quantidade de memória ociosa (não utilizada).
    • buff : A quantidade de memória usada como buffers.
    • cache : a quantidade de memória usada como cache.
  • Troca:
    • si : A quantidade de memória virtual trocada do espaço de troca.
    • portanto : A quantidade de memória virtual trocada pelo espaço de troca.
  • IO:
    • bi : Bloqueia. O número de blocos de dados usados ​​para trocar a memória virtual de volta para a RAM.
    • bo : Bloqueia. O número de blocos de dados usados ​​para trocar a memória virtual da RAM para o espaço de troca.
  • Sistema:
    • in : O número de interrupções por segundo, incluindo o relógio.
    • cs : o número de mudanças de contexto por segundo. Uma mudança de contexto ocorre quando o kernel muda do processamento do sistema para o modo de usuário.
  • CPU: todos  esses valores são porcentagens do tempo total da CPU:
    • us : Tempo gasto na execução do código do usuário (não kernel).
    • sy : Tempo gasto executando o código do kernel.
    • id : Tempo gasto inativo.
    • wa : Tempo gasto esperando por entrada ou saída.
    • st : O tempo que uma máquina virtual tem que esperar até que o hipervisor termine de atender a outras máquinas virtuais antes de voltar e atender a essa máquina virtual.
Recomendado:  Como fazer upgrade de IA em qualquer imagem com difusão estável

O comando superior

O topcomando exibe uma tela repleta de informações.  Os valores são atualizados a cada poucos segundos.

Para usá-lo, digitamos o seguinte:

topo

O comando "top" em uma janela de terminal.

A tecla “e” foi pressionada. Isso alterou a exibição para megabytes, que são mais fáceis de analisar visualmente do que longas strings que representam bytes. Existem cinco linhas de informações na parte superior da tela e um painel inferior com colunas de dados.

Aqui estão as informações que você encontrará em cada linha:

  • Linha um: o tempo, há quanto tempo o computador está funcionando, quantas pessoas estão conectadas e qual foi a média de carga nos últimos um, cinco e 15 minutos.
  • Linha dois: o número de tarefas e seus estados: em execução, parada, dormindo ou zumbi.
  • Linha três: informações da CPU (veja a divisão dos campos abaixo).
  • Linha quatro:  A quantidade total de memória física e quanta está livre, usada, em buffer ou em cache.
  • Linha cinco: Quantidade total de memória swap e quanta está livre, usada e disponível (levando em consideração a memória que se espera que seja recuperada dos caches).

Os campos da CPU na linha três são os seguintes:

  • us: Tempo que a CPU gasta executando processos para usuários no espaço do usuário.
  • sy: Tempo que a CPU gastou executando processos de “espaço do kernel” do sistema.
  • ni: Tempo que a CPU gasta executando processos com um valor legal definido manualmente.
  • id: tempo ocioso da CPU.
  • wa: Tempo que a CPU gasta esperando a conclusão da E / S.
  • hi: Tempo que a CPU gastou atendendo interrupções de hardware.
  • si: Tempo que a CPU gastou atendendo interrupções de software.
  • st (tempo de roubo): Tempo que a CPU perdeu devido à execução de máquinas virtuais.

Você pode ter que pressionar as teclas de seta esquerda ou direita para ver todas as colunas. Os valores em cada coluna são descritos abaixo:

  • PID: ID do processo.
  • USUÁRIO: Nome do dono do processo.
  • PR: Prioridade do processo.
  • NI: O bom valor do processo.
  • VIRT: Memória virtual utilizada pelo processo.
  • RES: Memória residente utilizada pelo processo.
  • SHR: Memória compartilhada usada pelo processo.
  • S: Status do processo. (Veja a lista de valores que este campo pode assumir abaixo).
  • % CPU: a proporção do tempo de CPU usado pelo processo desde a última atualização.
  • % MEM:  o compartilhamento de memória física usado.
  • TIME +: Tempo  total de CPU usado pela tarefa em centésimos de segundo.
  • COMANDO:  O nome ou linha do comando (nome + opções). (Esta coluna está fora da tela à direita na imagem acima.)
Recomendado:  O que é o Clubhouse? Rede social de áudio drop-in

O status exibido na Scoluna pode ser um dos seguintes:

  • D: Sono ininterrupto.
  • R: Correndo.
  • S: Dormindo.
  • T: rastreado (parado).
  • Z: Zumbi.

Pressione Q para sair  top.

Lendo / proc / meminfo

Muitas (e, provavelmente, a maioria) das ferramentas do Linux que relatam estatísticas de memória recuperam suas informações do pseudo sistema de arquivos /proc/meminfo . Podemos usar os comandos catou lesspara fazer o mesmo.

Nós digitamos o seguinte:

menos / proc / meminfo

O comando "less / proc / meminfo" em uma janela de terminal.

Você pode ver campos diferentes dependendo do kernel que está sendo executado e da arquitetura da CPU. Obtivemos os seguintes resultados em nossa máquina virtual:

MemTotal: 2035260 kB
MemFree: 919064 kB
Disponível na memória: 1300932 kB
Buffers: 33528 kB
Em cache: 457604 kB
SwapCached: 29732 kB
Ativo: 313360 kB
Inativo: 603276 kB
Ativo (anon): 74648 kB
Inativo (anon): 355004 kB
Ativo (arquivo): 238712 kB
Inativo (arquivo): 248272 kB
Imprevisível: 16 kB
Mlocked: 16 kB
SwapTotal: 1557568 kB
SwapFree: 873024 kB
Sujo: 80 kB
Writeback: 0 kB
AnonPages: 414100 kB
Mapeado: 97436 kB
Shmem: 4148 kB
KReclaimable: 52932 kB
Laje: 94216 kB
SReclaimable: 52932 kB
SUnreclaim: 41284 kB
KernelStack: 9280 kB
Tabelas de páginas: 45264 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 2575196 kB
Committed_AS: 5072192 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 35712 kB
VmallocChunk: 0 kB
Percpu: 720 kB
Hardware corrompido: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 180160 kB
DirectMap2M: 1916928 kB

Todos os tamanhos estão em kibibytes, a  menos que seja indicado o contrário. Aqui está o que todos eles significam, junto com alguns outros que você pode ver dependendo da configuração e do hardware do seu computador:

  • MemTotal: RAM total utilizável (exceto alguns bits reservados e o código binário do kernel).
  • MemFree: A soma de LowFree+ HighFree. A quantidade de RAM disponível atualmente.
  • MemAvailable: Estimativa de memória disponível para iniciar novos aplicativos, sem troca.
  • Buffers: armazenamento temporário para blocos de disco bruto. Isso reduz a entrada e a saída do disco rígido. Ele também acelera o acesso a solicitações subsequentes dos mesmos dados porque já estão na memória.
  • Em cache: páginas em cache lidas de arquivos no disco rígido (não incluindo  SwapCached).
  • SwapCached: Memória que foi trocada e recolocada , e uma cópia permanece no espaço de troca.
  • Ativo: Memória usada recentemente. Não é recuperado a menos que seja absolutamente necessário.
  • Inativo: Memória que está sendo usada, mas não a usada mais recentemente. É um provável candidato à recuperação.
  • Ativo (anon): Memória alocada para arquivos criados em um tmpfs sistema de pseudo-arquivos. Arquivos anônimos não residem no disco rígido.
  • Inativo (  anônimo ): Quantidade de memória anônima, tmpfse shmemque é candidata a despejo (recuperação de memória).
  • Ativo (arquivo):  Quantidade de memória cache de arquivo em uso ou que foi usada desde o ciclo de recuperação de memória anterior.
  • Inativo (arquivo):  Quantidade de memória cache de arquivo lida de um disco rígido que é candidata a recuperação.
  • Inevisível: quantidade de memória que deveria ser eliminada, mas não é porque está bloqueada na memória por processos do espaço do usuário.
  • Mlocked: quantidade total de memória que não pode ser removida porque está bloqueada por processos de espaço do usuário.
  • HighTotal: quantidade total de HighMem, que é usada por programas de espaço do usuário e cache de página. O kernel pode acessar esta zona de memória, mas é mais lento para acessar do que LowMem.
  • HighFree:  Quantidade de HighMem grátis.
  • LowTotal:  Quantidade de LowMem, que está disponível para todos os mesmos usos que HighMem, mas também para o kernel usar para seus próprios fins.
  • LowFree: Quantidade de LowMem grátis.
  • MmapCopy:  quantidade de memória que foi mapeada para os dados do arquivo.
  • SwapTotal: quantidade total de espaço de troca disponível.
  • SwapFree:  quantidade de espaço de troca que não está sendo usada no momento.
  • Sujo:  quantidade de memória esperando para ser gravada de volta no disco.
  • Writeback: Memória ativamente sendo gravada de volta no disco.
  • AnonPages: páginas não suportadas por arquivo mapeadas em tabelas de página de espaço do usuário.
  • Mapeado: arquivos (como bibliotecas) que são mapeados na memória.
  • Shmem:  quantidade de memória consumida em tmpfssistemas de pseudo-arquivos.
  • KReclaimable: Alocações de memória do kernel que o kernel tentará recuperar se a demanda por memória for suficientemente severa.
  • Slab: Cache de estruturas de dados no kernel.
  • SReclaimable:  quantidade de Slabmemória que pode ser recuperada, como caches.
  • SUnreclaim:  Quantidade de Slabmemória que não pode ser recuperada.
  • KernelStack:  quantidade de memória alocada para as pilhas do kernel.
  • PageTables:  quantidade de memória dedicada ao nível mais baixo de tabelas de páginas.
  • Listas rápidas: como a alocação e exclusão de tabelas de páginas é uma operação muito frequente, é vital que seja o mais rápido possível. Portanto, as páginas usadas para tabelas de páginas são armazenadas em cache em uma série de listas diferentes chamadas de “listas rápidas”.
  • NFS_Unstable: páginas do Network File System (NFS) que o servidor recebeu, mas ainda não foi gravada no armazenamento não volátil.
  • Bounce: Memória usada para buffers de bounce do dispositivo de bloco. Um buffer de rejeição é posicionado na memória suficientemente baixo para um dispositivo acessá-lo diretamente. Os dados são então copiados para a página do usuário desejada no HighMem.
  • WritebackTmp: Memória usada pelo Filesystem no espaço do usuário (FUSE) para buffers de write-back temporários.
  • CommitLimit: A quantidade total de memória atualmente disponível para ser alocada no sistema.
  • Committed_AS: A quantidade de memória estimada para satisfazer todas as demandas atuais. Se um programa solicitar alguma RAM, a solicitação será gravada, mas a RAM só será alocada quando o programa começar a usá-la. Também só é alocado conforme necessário, até o valor máximo reservado pelo programa. Mais memória pode ser “alocada” do que realmente pode ser entregue. Se todos os programas tentarem sacar suas fichas de RAM de uma vez, o casino da memória pode estourar (e terá que ir para os financiadores do espaço de troca).
  • VmallocTotal:  tamanho total da área de memória vmalloc .
  • VmallocUsed: quantidade de área vmalloc usada. Desde o Linux 4.4, este campo não é mais calculado, é codificado.
  • VmallocChunk: O  maior bloco contíguo de área vmalloc livre.
  • HardwareCorrupted:  quantidade de memória marcada como tendo problemas de corrupção de memória física. Não será alocado.
  • LazyFree:  quantidade de memória no MADV_FREEestado. Quando um aplicativo define o MADV_FREEsinalizador em um intervalo de páginas,  isso indica que ele não é mais necessário e agora são candidatos a recuperação. A recuperação real pode ser atrasada até que haja demanda suficiente de memória. Se o aplicativo começar a gravar nas páginas, a reclamação pode ser cancelada.
  • AnonHugePages: páginas enormes com backup sem arquivo mapeadas em tabelas de página do espaço do usuário. Páginas sem backup em arquivo não vieram de um arquivo do disco rígido.
  • ShmemHugePages:  quantidade de memória usada pela memória compartilhada ( shmem) e sistemas de pseudo-arquivos ( tmpfs) alocada com páginas grandes.
  • ShmemPmdMapped:  Quantidade de memória compartilhada mapeada no espaço do usuário com páginas enormes.
  • CmaTotal:  Quantidade de páginas CMA (Contiguous Memory Allocator). Eles são usados ​​por dispositivos que só podem se comunicar com regiões contíguas da memória.
  • CmaFree:  Quantidade de páginas CMA (Contiguous Memory Allocator) gratuitas.
  • HugePages_Total:  tamanho enorme do pool de páginas.
  • HugePages_Free:  Número de páginas enormes não alocadas no pool.
  • HugePages_Rsvd:  Número de páginas enormes reservadas. O compromisso de alocação foi feito, mas a alocação ainda não ocorreu.
  • HugePages_Surp:  Número de páginas enormes no pool acima do valor de sistema definido.
  • Hugepagesize:  tamanho de páginas enormes.
  • DirectMap4k: Número de bytes de RAM mapeados para páginas de 4 kB.
  • DirectMap4M: Número de bytes de RAM mapeados para páginas de 4 MB.
  • DirectMap2M: Número de bytes de RAM mapeados para páginas de 2 MB.
  • DirectMap1G: Número de bytes de RAM mapeados para páginas de 2 GB.
Recomendado:  O que é Denuvo, e por que os jogadores o odeiam?

Como de costume com o Linux, há mais de uma maneira de obter uma visão geral rápida e sempre pelo menos uma maneira de se aprofundar nos detalhes.

Você provavelmente usará free, topvmstate regularmente e manterá uma /proc/meminforeserva para quando precisar fazer um mergulho profundo para investigar um problema específico.