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/meminfo
diretamente.
Índice
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 swappiness
valor no Linux e quando o kernel começará a usar swap . Não é verdade que o swappiness
valor 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 -m
opção (mebibytes). No entanto, você também pode usar -b
(bytes), -k
(kibibytes) ou -g
(gibibytes).
Nós digitamos o seguinte comando:
livre -m
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 Mem
colunas 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
tmpfs
sistemas 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 Swap
colunas 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 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 vmstat
comando 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
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.
O comando superior
O top
comando exibe uma tela repleta de informações. Os valores são atualizados a cada poucos segundos.
Para usá-lo, digitamos o seguinte:
topo
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.)
O status exibido na S
coluna 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 cat
ou less
para fazer o mesmo.
Nós digitamos o seguinte:
menos / proc / meminfo
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,
tmpfs
eshmem
que é 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
tmpfs
sistemas 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
Slab
memória que pode ser recuperada, como caches. - SUnreclaim: Quantidade de
Slab
memó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_FREE
estado. Quando um aplicativo define oMADV_FREE
sinalizador 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.
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
, top
e vmstate
regularmente e manterá uma /proc/meminfo
reserva para quando precisar fazer um mergulho profundo para investigar um problema específico.