sábado, 28 de setembro de 2024

Comandos Linux: explorando memória virtual com vmstat


 Uma visão detalhada do comando vmstat, sua sintaxe básica e como usá-lo.

Há muitos comandos, ferramentas e variações dos dois para você colocar em prática quando se trata de estatísticas do sistema no Linux. No entanto, se você precisa de detalhes sobre memória virtual, usar o vmstat é uma ótima opção.

O que é?

O Virtual Memory Statistics Reporter, também conhecido como vmstat, é uma ferramenta de linha de comando do Linux que relata vários bits de informações do sistema. O VMSTAT relata informações sobre processos, memória, paginação, bloco de I/O, traps, discos e atividade da CPU.

Ao executar o vmstat, tenha em mente que as informações são uma média  solicitadas desde o momento da última reinicialização. Relatórios subsequentes usam medições de atraso e contagem. Eu abordo esses especificamente durante a discussão de sintaxe.

Sintaxe do comando

A sintaxe do comando vmstat é bem simples:

$ vmstat [option][delay [count]]

Opções

delay - O delay entre a atualização em segundos. Se o delay não é especificado,  um relatório é impresso com os valores médios desde a última inicialização.

count - Números de atualizações. Na ausência de count, quando o delay é definido, o padrão é infinito.

-a, --active

Exibe a memória ativa ou inativa. 

-f, --forks

O -f exibe o número de foros desde a inicialização. Isso inclui as sytem calls, fork, vfork e é equivalente ao número total de tarefas criadas. Cada processos é representado por uma ou mais tarefas, dependendo do uso do thread. Esta tela não se repete.

-m, --slabs

Exibe o slabinfo.

-n, --one-header

 Exibe o cabeçalho apenas uma vez e não periodicamente.

-s, --stats

Mostra uma tabela de vários contadores de eventos e estatísticas de memória. Esta tela não se repete. 

-d, --disk

Relatório de estatísticas de disco.

-D, --disk-sum

Relata algumas estatísticas resumidas sobre a atividade do disco 

-p, --partition device 

Estatísticas detalhadas sobre as partições.

-s, --unit character 

Altera a saida entre 1000 (k), 1024 (K), 1000000 (m), ou 1048576 (M) bytes. Observe que isso não altera os campos do swap (si/so) ou block (bi/bo).

-t, --timestamp

 Adiciona timestamp para cada linha

-w, --wide

Modo de saída amplo (útil para sistema com maior quantidade de memória, onde o modo de saída padrão sofre de quebra de coluna indesejada). A saída é mais larga que 80 caracteres por linha.

-y, --no-first

 Omite o primeiro relatório com estatísticas desde a inicialização do sistema.

-V, --version

Mostra informação sobre a versão e sai.

-h, --help

 Mostra ajuda e sai.  

Saída básica e como entendê-la:

A forma mais básica deste comando não usa nenhuma opção. Aqui está a saída padrão e como lê-la:



Você vê informações sobre processos, memória, swap, IO, sistema e CPU. A página man para o comando declara o seguinte (man vmstat):

  • procs
    • r: Número de processos em execução (run queue)
    • b: Número de processos em espera (blocked)
  • memory (são afetados pela opção --unit)
    • swpd: Quantidade de memória virtual usada
    • free: Memória livre.
    • buff: Memória usada como buffer
    • cache: Memória usada como cache
    • inact: a quantidade de memória inativa. (opção -a)
    • active: a quantidade de memória ativa. (opção -a)
  • swap (são afetados pela opção --unit)
    • si: Quantidade de memória trocada do disco para a RAM (/s).
    • so: Quantidade de memória trocada da RAM para o disco (/s).
  • io
    • bi: Blocos recebidos do dispositivo de bloco (disco) (KiB/s)
    • bo: Blocos enviados para o dispositivo de bloco. (KiB/s)
  • system
    • in: número de interrupções por segundo, incluindo o clock
    • cs: número de alteração de contexto por segundo
  • cpu (Essas são porcentagens do tempo total da CPU)
    • us: tempo gasto executando código não-kernel. (Tempo do usuário, incluindo tempos bons)
    • sy: tempo gasto executando o código do kernel. (tempo do sistema)
    • id: tempo gasto ocioso. Antes do Linux 2.5.41, isso inclui o tempo io-wait.
    • wa: tempo gasto esperando por I/O. 
    • st: tempo roubado de uma máquina virtual. Antes do Linux 2.6.11, desconhecido.
    • gu: tempo gasto rodando codigo do KVM guest.

Descrição do campo para o modo disco

  • Reads
    • total: total de leituras completadas com sucesso
    • merged: leituras agrupadas (resultando em um I/O)
    • sectors: leituras de setor com sucesso
    • ms: milissegundos gasto com leituras
  • Writes
    • total: total de escritas completadas com sucesso
    • merged: escritas agrupadas (resultando em um I/O)
    • sectors: leituras de setor com sucesso
    • ms: milissegundos gasto com escrita
  • IO
    • cur: I/O em progresso
    • s: segundos gastos com I/O

Descrição de campos para modo de partições de disco

    • reads: numero total de leituras para essa partição
    • read sectors: total de setor lidos para essa partição
    • writes: numero total de escrita para essa partição
    • requested writes: numero total de requisição de escrita para a partição

Descrição de campos para o modo SLAB

O modo slab mostra estatísticas por slab, para obter mais informações sobre essas informações, consulte Slabinfo (5)

    • cache: nome do cache
    • num: numeros concorrentes de objetos ativos
    • total: números totais de objetos disponíveis
    • size: tamanho de cada objeto
    • pages: numero de paginas com pelo menos um objeto ativo

Notas

vmstat requer acesso de leitura para os arquivos abaixo de /proc. O -m requer acesso de leitura a /proc/slabinfo, que pode não estar disponível para usuários padrão. Opções de montagem para /proc, como sub-SET = PID, também podem afetar o que é visível.

Identificação de Gargalos

Para identificar gargalos, observe as seguintes situações:

  1. CPU:
    1. Se us e sy estão altos, a CPU está sobrecarregada.
    2. Se wa está alto, há um gargalo de I/O.
  2. Memória:
    1. Se free está baixo e si/so estão altos, há falta de memória física, causando troca excessiva (swap).
  3. Disco:
    1. Se bi e bo estão altos, há muita atividade de disco, indicando um possível gargalo de I/O.


Nenhum comentário:

Postar um comentário