Compartilhar via


Coletar métricas de desempenho para uma VM do Linux

Aplica-se a: ✔️ VMs linux

Este artigo descreve como recuperar métricas de desempenho de uma VM (máquina virtual) Linux no Microsoft Azure usando os utilitários Sysstat (ferramentas de monitoramento de desempenho). Ele fornece exemplos de como usar esses utilitários e ler suas saídas.

Vários comandos estão disponíveis para coletar contadores de desempenho no Linux. Comandos como vmstat e uptime fornecem métricas essenciais do sistema, como uso da CPU, memória do sistema e carga do sistema. A maioria desses comandos é pré-instalada por padrão, enquanto outros podem ser facilmente acessados a partir dos repositórios padrão.

Com base no tipo de métricas, esses comandos podem ser categorizados em:

Instale os utilitários Sysstat para Linux

Você pode instalar os utilitários Sysstat em uma VM Linux usando um comando Bash ou o recurso Executar Comando por meio da CLI do Azure. Se você usar os comandos da CLI do Azure fornecidos neste artigo, verifique se as duas variáveis de ambiente a seguir estão definidas. Você precisa substituir o nome do grupo de recursos e o nome da VM pelos valores reais.

export MY_RESOURCE_GROUP_NAME="yourResourceGroup"
export MY_VM_NAME="yourVM"

Observação

Alguns dos comandos a seguir requerem privilégios de root.

Para instalar o sysstat pacote em uma VM do Linux, use o seguinte comando:

Ubuntu:

sudo apt install sysstat -y

Red Hat:

sudo dnf install sysstat -y

SUSE:

sudo zypper install sysstat --non-interactive

CPU

Ferramenta mpstat

O mpstat comando faz parte do sysstat pacote. Ele exibe a utilização da CPU e a média de cada CPU, o que é útil para identificar o uso da CPU. O mpstat comando fornece uma visão geral da utilização da CPU das CPUs disponíveis, ajudando a identificar o equilíbrio de uso e se uma única CPU está sobrecarregada.

Aqui está um exemplo de como executar mpstat:

mpstat -P ALL 1 2
  • -P: Indica que o processador deve exibir estatísticas e o ALL argumento indica que as estatísticas de todas as CPUs on-line no sistema devem ser exibidas.
  • 1: O primeiro argumento numérico especifica o intervalo (em segundos) no qual mpstat deve atualizar e exibir novas estatísticas.
  • 2: O segundo argumento numérico especifica o número de vezes mpstat que deve exibir estatísticas. Nesse caso, ele imprime duas estatísticas em um intervalo de um segundo.

Você pode aumentar o argumento number of times para acomodar tempos de coleta de dados mais longos. Geralmente, três ou cinco segundos são suficientes. Para sistemas com contagens de núcleos mais altas, reduzi-lo para dois segundos pode ajudar a gerenciar o volume de dados exibidos.

Como ler a saída mpstat

Aqui está um exemplo de saída de mpstat:

Linux 5.14.0-362.8.1.el9_3.x86_64 (alma9)       02/21/24        _x86_64_        (8 CPU)

16:55:50     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
16:55:51     all   69.09    0.00   30.16    0.00    0.38    0.38    0.00    0.00    0.00    0.00
16:55:51       0   77.23    0.00   21.78    0.00    0.99    0.00    0.00    0.00    0.00    0.00
16:55:51       1   97.03    0.00    0.99    0.00    0.99    0.99    0.00    0.00    0.00    0.00
16:55:51       2   11.11    0.00   88.89    0.00    0.00    0.00    0.00    0.00    0.00    0.00
16:55:51       3   11.00    0.00   88.00    0.00    0.00    1.00    0.00    0.00    0.00    0.00
16:55:51       4   83.84    0.00   16.16    0.00    0.00    0.00    0.00    0.00    0.00    0.00
16:55:51       5   76.00    0.00   23.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00
16:55:51       6   96.00    0.00    3.00    0.00    0.00    1.00    0.00    0.00    0.00    0.00
16:55:51       7  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
[...]

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all   74.02    0.00   25.52    0.00    0.25    0.21    0.00    0.00    0.00    0.00
Average:       0   63.00    0.00   36.67    0.00    0.33    0.00    0.00    0.00    0.00    0.00
Average:       1   97.33    0.00    1.67    0.00    0.33    0.67    0.00    0.00    0.00    0.00
Average:       2   42.33    0.00   57.33    0.00    0.33    0.00    0.00    0.00    0.00    0.00
Average:       3   34.33    0.00   65.00    0.00    0.33    0.33    0.00    0.00    0.00    0.00
Average:       4   88.63    0.00   11.04    0.00    0.00    0.33    0.00    0.00    0.00    0.00
Average:       5   71.33    0.00   28.33    0.00    0.33    0.00    0.00    0.00    0.00    0.00
Average:       6   95.65    0.00    4.01    0.00    0.00    0.33    0.00    0.00    0.00    0.00
Average:       7   99.67    0.00    0.00    0.00    0.33    0.00    0.00    0.00    0.00    0.00

Há várias coisas importantes a serem observadas. A primeira linha fornece informações úteis:

  • Kernel e versão: 5.14.0-362.8.1.el9_3.x86_64
  • Nome do host: alma9
  • Data: 02/21/24
  • Arquitetura: _x86_64_
  • Número total de CPUs (esta informação é útil para interpretar a saída de outros comandos): (8 CPU)

Em seguida, as métricas das CPUs são exibidas. Aqui está uma explicação de cada coluna:

  • Time: O carimbo de data/hora que indica quando a amostra foi coletada.
  • CPU: O identificador numérico da CPU. O identificador all representa uma média para todas as CPUs.
  • %usr: A porcentagem de utilização da CPU por processos de espaço do usuário, normalmente aplicativos de usuário.
  • %nice: A porcentagem de utilização da CPU por processos de espaço do usuário com um bom valor (prioridade).
  • %sys: A porcentagem de utilização da CPU por processos de espaço do kernel.
  • %iowait: A porcentagem de tempo ocioso da CPU aguardando operações de E/S pendentes.
  • %irq: a porcentagem de tempo de CPU gasto na manutenção de interrupções de hardware.
  • %soft: a porcentagem de tempo de CPU gasto na manutenção de interrupções de software.
  • %steal: a porcentagem de tempo de CPU que uma VM gastou atendendo a outras VMs (não aplicável ao Azure devido à falta de superprovisionamento de CPU).
  • %guest: a porcentagem de tempo de CPU que uma CPU virtual gastou atendendo VMs (não aplicável ao Azure; relevante apenas para sistemas bare-metal que executam VMs).
  • %gnice: a porcentagem de tempo de CPU que uma CPU virtual com um bom valor gasto atendendo VMs (não aplicável ao Azure; relevante apenas para sistemas bare-metal que executam VMs).
  • %idle: a porcentagem de tempo de CPU que estava ocioso e não aguardando solicitações de E/S.

Principais considerações

Principais considerações ao revisar a saída de mpstat:

  • Verifique se todas as CPUs estão carregadas corretamente e se nenhuma CPU atende a toda a carga. Essas informações podem indicar um aplicativo de thread único.
  • Procure um equilíbrio saudável entre %usr e %sys, pois o oposto indicaria mais tempo gasto na carga de trabalho real do que em atender aos processos do kernel.
  • %iowait Procure porcentagens, pois valores altos podem indicar um sistema que está constantemente aguardando solicitações de E/S.
  • O alto %soft uso pode indicar alto tráfego de rede.

Ferramenta vmstat

O vmstat utilitário está amplamente disponível na maioria das distribuições Linux. Ele fornece uma visão geral de alto nível da utilização de CPU, memória e E/S de disco em um único painel.

Aqui está um exemplo de como executar vmstat:

vmstat -w 1 5
  • -w: Use impressão ampla para manter colunas consistentes.
  • 1: O primeiro argumento numérico especifica o intervalo em segundos entre cada relatório. Nesse caso, vmstat produzirá um relatório a cada segundo.
  • 5: O segundo argumento numérico especifica o número de relatórios que vmstat deve gerar. Com 5 especificado aqui, vmstat gerará um total de cinco relatórios.

Como ler a saída vmstat

Aqui está um exemplo de saída de vmstat:

--procs-- -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu--------
   r    b         swpd         free         buff        cache   si   so    bi    bo   in   cs  us  sy  id  wa  st
  14    0            0     26059408          164       137468    0    0    89  3228   56  122   3   1  95   1   0
  14    1            0     24388660          164       145468    0    0     0  7811 3264 13870  76  24   0   0   0
  18    1            0     23060116          164       155272    0    0    44  8075 3704 15129  78  22   0   0   0
  18    1            0     21078640          164       165108    0    0   295  8837 3742 15529  73  27   0   0   0
  15    2            0     19015276          164       175960    0    0     9  8561 3639 15177  73  27   0   0   0

A saída é categorizada nos seis grupos a seguir. A saída mostra estatísticas gerais para todo o sistema (ou seja, todas as CPUs e dispositivos de bloco agregados).

  • procs: Estatísticas para processos.
  • memory: Estatísticas da memória do sistema.
  • swap: Estatísticas para swap.
  • io: Estatísticas de E/S de disco.
  • system: Estatísticas para alternâncias e interrupções de contexto.
  • cpu: Estatísticas de uso da CPU.

procs

A seção procs tem duas colunas:

  • r: O número de processos executáveis na fila de execução.
  • b: o número de processos bloqueados aguardando E/S.

Esta seção mostra imediatamente se há algum gargalo no sistema. Números altos em qualquer coluna indicam processos enfileirados e aguardando recursos.

A r coluna indica o número de processos que estão aguardando o tempo de CPU para serem executados. Uma maneira fácil de interpretar esse número é a seguinte: se o número de processos na r fila for maior que o número total de CPUs, pode-se inferir que a CPU do sistema está muito carregada para alocar tempo de CPU para todos os processos que aguardam para serem executados.

A b coluna indica o número de processos aguardando execução e bloqueados por solicitações de E/S. Um número alto nesta coluna indicaria um sistema que está passando por alta E/S e os processos não podem ser executados devido a outros processos aguardando a conclusão das solicitações de E/S. Isso também pode indicar alta latência de disco.

memória

A seção de memória tem quatro colunas. Os valores são mostrados em bytes. Esta seção fornece uma visão geral de alto nível do uso de memória.

  • swpd: A quantidade de memória de troca usada.
  • free: A quantidade de memória livre.
  • buff: a quantidade de memória usada para buffers.
  • cache: A quantidade de memória usada para cache.

troca

A seção de troca tem duas colunas:

  • si: A quantidade de memória trocada (movida da memória do sistema para a troca) por segundo.
  • so: A quantidade de memória trocada (movida da troca para a memória do sistema) por segundo.

Se uma alta si for observada, ela pode representar um sistema que está ficando sem memória do sistema e movendo páginas para troca (troca).

Io

A seção io tem duas colunas. Esses valores estão em blocos por segundo.

  • bi: O número de blocos recebidos de um dispositivo de bloco (lê blocos por segundo) por segundo.
  • bo: O número de blocos enviados para um dispositivo de bloco (gravações por segundo) por segundo.

system

A seção do sistema tem duas colunas:

  • in: O número de interrupções por segundo.
  • cs: O número de alternâncias de contexto por segundo.

Um alto número de interrupções por segundo pode indicar um sistema que está ocupado com dispositivos de hardware (por exemplo, operações de rede).

Um alto número de alternâncias de contexto pode indicar um sistema ocupado com muitos processos de execução curta. Não há um número bom ou ruim aqui.

cpu

A cpu seção tem cinco colunas:

  • us: Porcentagem de utilização do espaço do usuário.
  • sy: Porcentagem de utilização do sistema (espaço do kernel).
  • id: Porcentagem de utilização do tempo ocioso da CPU.
  • wa: Porcentagem de utilização do tempo ocioso da CPU aguardando processos com E/S.
  • st: porcentagem de utilização do tempo de CPU gasto atendendo a outras CPUs virtuais (não aplicável ao Azure).

Os valores são apresentados em porcentagens. Esses valores são os mesmos apresentados pelo mpstat utilitário e servem para fornecer uma visão geral de alto nível do uso da CPU. Siga um processo semelhante ao mpstat ao revisar esses valores.

Uptime

O uptime utilitário fornece uma ampla visão geral da carga do sistema com os valores médios de carga.

uptime

Como ler a saída do tempo de atividade

Aqui está um exemplo de saída de uptime:

16:55:53 up 9 min,  2 users,  load average: 9.26, 2.91, 1.18

O load average exibe três números. Esses números correspondem à carga do sistema em 1intervalos de , 5e minutos 15 .

Para interpretar esses valores, é importante saber o número de CPUs disponíveis no sistema, que é obtido da saída anterior mpstat . O valor depende do número total de CPUs, portanto, usando a mpstat saída como exemplo, o sistema tem oito CPUs, e uma média de carga de 8 significaria que todos os núcleos são carregados a 100%.

Um valor de 4 significaria que metade das CPUs são carregadas a 100% (ou uma carga total de 50% para todas as CPUs). Na saída anterior, a média de carga é 9.26, o que significa que a CPU está carregada em cerca de 115%.

Os 1mintervalos , 5me 15m ajudam a identificar se a carga está aumentando ou diminuindo ao longo do tempo.

Além disso, o nproc comando pode ser usado para recuperar o número de CPUs.

Memória

Para memória, dois comandos podem recuperar detalhes de uso de memória.

livre

O free comando mostra a utilização da memória do sistema.

Aqui está um exemplo de como executar free:

free -h
  • -h: Esta opção especifica o formato de saída para ser legível. Ele converte os tamanhos de memória de bytes em um formato mais legível (kilobytes, megabytes e gigabytes) e anexa rótulos de unidade apropriados (KB, MB e GB).

Como ler a saída livre

Aqui está um exemplo de saída de free:

               total        used        free      shared  buff/cache   available
Mem:            31Gi        19Gi        12Gi        23Mi        87Mi        11Gi
Swap:           23Gi          0B        23Gi

Na saída, observe a memória do total sistema versus a available memória e a troca verstotal.used A memória disponível considera a memória alocada para o cache, que pode ser retornada aos aplicativos do usuário. Algum uso de swap é normal em kernels modernos, pois algumas páginas de memória usadas com pouca frequência podem ser movidas para swap.

trocar

O swapon comando exibe onde a troca está configurada e as respectivas prioridades dos dispositivos ou arquivos de troca.

Aqui está um exemplo de como executar swapon:

swapon -s

Aqui está um exemplo de saída de swapon:

Filename      Type          Size          Used   Priority
/dev/zram0    partition     16G           0B      100
/mnt/swapfile file          8G            0B      -2

Essas informações são importantes para verificar se a permuta está configurada em um local não ideal, por exemplo, em um disco de dados ou do sistema operacional. No quadro de referência do Azure, a troca deve ser configurada na unidade efêmera, pois fornece o melhor desempenho.

Principais considerações

  • Lembre-se de que a memória é um recurso finito. Uma vez que a memória do sistema (RAM) e a troca estejam esgotadas, o assassino de memória insuficiente (assassino OOM) matará os processos.
  • Verifique se a troca não está configurada em um disco de dados ou disco do sistema operacional, pois isso pode causar problemas com E/S devido a diferenças de latência. A troca deve ser configurada na unidade efêmera.
  • Observe também que é comum ver valores livres próximos de zero na free -h saída. Esse comportamento se deve ao cache da página; O kernel libera essas páginas conforme necessário.

E/S

A E/S de disco é uma das áreas que o Azure mais sofre quando limitada, pois as latências para discos podem chegar a 100ms+. Os comandos a seguir podem ajudar a identificar esses cenários.

IOSTAT

O iostat utilitário faz parte do sysstat pacote. Ele exibe as estatísticas de uso de cada dispositivo de bloco e ajuda a identificar problemas de desempenho relacionados ao bloco. Ele fornece detalhes sobre métricas como taxa de transferência, latência e tamanho da fila. Essas métricas ajudam a entender se a E/S de disco se torna um fator limitante.

Aqui está um exemplo de como executar iostat:

iostat -dxtm 1 5
  • -d: Relatório de uso para cada dispositivo.
  • -x: Estatísticas estendidas.
  • -t: Exibe o carimbo de data/hora de cada relatório.
  • -m: Exibido em MB/s.
  • 1: O primeiro argumento numérico indica com que frequência atualizar a exibição em segundos.
  • 2: O segundo argumento numérico indica quantas vezes os dados são atualizados.

Como ler a saída iostat

Aqui está um exemplo de saída de iostat:

Linux 5.14.0-362.8.1.el9_3.x86_64 (alma9)       02/21/24        _x86_64_        (8 CPU)

02/21/24 16:55:50
Device            r/s     rMB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wMB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dMB/s   drqm/s  %drqm d_await dareq-sz     f/s f_await  aqu-sz  %util
sda              1.07      0.02     0.00   0.00    1.95    20.40   23.25     24.55     3.30  12.42  113.75  1081.06    0.26    537.75     0.26  49.83    0.03 2083250.04    0.00    0.00    2.65   2.42
sdb             16.99      0.67     0.36   2.05    2.00    40.47   65.26      0.44     1.55   2.32    1.32     6.92    0.00      0.00     0.00   0.00    0.00     0.00   30.56    1.30    0.16   7.16
zram0            0.51      0.00     0.00   0.00    0.00     4.00    0.00      0.00     0.00   0.00    0.00     4.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00    0.00    0.00   0.00

A saída tem várias colunas que não são importantes (colunas extras devido à -x opção). Alguns dos mais importantes são:

  • r/s: Operações de leitura por segundo (IOPS).
  • rMB/s: Leia megabytes por segundo.
  • r_await: Latência de leitura em milissegundos.
  • rareq-sz: Tamanho médio da solicitação de leitura em kilobytes.
  • w/s: Operações de gravação por segundo (IOPS).
  • wMB/s: Escreva megabytes por segundo.
  • w_await: Latência de gravação em milissegundos.
  • wareq-size: Tamanho médio da solicitação de gravação em kilobytes.
  • aqu-sz: Tamanho médio da fila.

Principais considerações

  • Procure r/s, w/s (IOPS), rMB/s, e wMB/s, e verifique se esses valores estão dentro dos limites do disco fornecido. Se os valores estiverem próximos ou superiores aos limites, o disco será limitado, levando a uma alta latência. Essas informações também podem ser corroboradas com a %iowait métrica de mpstat.
  • A latência é uma excelente métrica para verificar se o disco funciona conforme o esperado. Normalmente, menos do que 9ms a latência esperada para PremiumSSD. Outras ofertas têm destinos de latência diferentes.
  • O tamanho da fila é um ótimo indicador de saturação. Normalmente, as solicitações são atendidas quase em tempo real e o número permanece próximo a um (já que a fila nunca cresce). Um número mais alto pode indicar saturação de disco (ou seja, solicitações enfileiradas). Não há um número bom ou ruim para essa métrica. Entender que qualquer número maior que um significa que as solicitações estão sendo enfileiradas ajuda a determinar se há saturação de disco.

lsblk

O lsblk utilitário mostra os dispositivos de bloco conectados ao sistema. Embora não forneça métricas de desempenho, ele permite uma visão geral rápida de como esses dispositivos estão configurados e quais pontos de montagem estão sendo usados.

Aqui está um exemplo de como executar lsblk:

lsblk

Como ler a saída lsblk

Aqui está um exemplo de saída de lsblk:

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    0  300G  0 disk
└─sda1   8:1    0  300G  0 part /mnt
sdb      8:16   0   30G  0 disk
├─sdb1   8:17   0    1M  0 part
├─sdb2   8:18   0  200M  0 part /boot/efi
├─sdb3   8:19   0    1G  0 part /boot
└─sdb4   8:20   0 28.8G  0 part /
zram0  252:0    0   16G  0 disk [SWAP]

Principais considerações

  • Procure onde os dispositivos estão montados.
  • Verifique se a troca não está configurada dentro de um disco de dados ou disco do sistema operacional, se habilitada.
  • Uma maneira fácil de correlacionar um dispositivo de bloco a um LUN no Azure é executando ls -lr /dev/disk/azureo .

Processo

A coleta de detalhes por processo ajuda a entender de onde vem a carga do sistema. O principal utilitário para coletar estatísticas de processo é pidstato , pois fornece detalhes sobre estatísticas de CPU, memória e E/S para cada processo. Por fim, um simples ps classificar o processo pelo uso superior de CPU e memória completa as métricas.

Observação

Esses comandos exigem privilégios de root usados sudo para mostrar detalhes de todos os processos em execução, não apenas os do usuário atual.

pidstat

O pidstat utilitário também faz parte do sysstat pacote. É como mpstat ou iostat na medida em que exibe métricas para um determinado intervalo de tempo. Por padrão, pidstat exibe métricas somente para processos com atividade.

Os argumentos a favor pidstat são os mesmos que para outras sysstat utilidades:

  • 1: O primeiro argumento numérico indica com que frequência atualizar a exibição em segundos.
  • 2: O segundo argumento numérico indica quantas vezes os dados são atualizados.

Observação

A produção pode crescer consideravelmente se houver muitos processos com atividade.

Estatísticas da CPU do processo

Para coletar estatísticas da CPU do processo, execute pidstat sem nenhuma opção:

pidstat 1 2
Como ler a saída das estatísticas da CPU

Aqui está um exemplo de saída de pidstat:

Linux 5.14.0-362.8.1.el9_3.x86_64 (alma9)       02/21/24        _x86_64_        (8 CPU)

# Time        UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
16:55:48        0        66    0.0%    1.0%    0.0%    0.0%    1.0%     0  kworker/u16:2-xfs-cil/sdb4
16:55:48        0        70    0.0%    1.0%    0.0%    0.0%    1.0%     0  kworker/u16:6-xfs-cil/sdb4
16:55:48        0        92    0.0%    1.0%    0.0%    0.0%    1.0%     3  kworker/3:1H-kblockd
16:55:48        0       308    0.0%    1.0%    0.0%    0.0%    1.0%     1  kworker/1:1H-kblockd
16:55:48        0      2068    0.0%    1.0%    0.0%    0.0%    1.0%     1  kworker/1:3-xfs-conv/sdb4
16:55:48        0      2181   63.1%    1.0%    0.0%   35.9%   64.1%     5  stress-ng-cpu
16:55:48        0      2182   28.2%    0.0%    0.0%   70.9%   28.2%     6  stress-ng-cpu
16:55:48        0      2183   28.2%    0.0%    0.0%   69.9%   28.2%     7  stress-ng-cpu
16:55:48        0      2184   62.1%    0.0%    0.0%   36.9%   62.1%     0  stress-ng-cpu
16:55:48        0      2185   43.7%    0.0%    0.0%   54.4%   43.7%     2  stress-ng-cpu
16:55:48        0      2186   30.1%    0.0%    0.0%   68.0%   30.1%     7  stress-ng-cpu
16:55:48        0      2187   64.1%    0.0%    0.0%   34.0%   64.1%     3  stress-ng-cpu

O comando exibe o uso de , %system, %guest (não aplicável ao Azure) %waite o uso total %CPU de %usrcada processo.

Principais considerações
  • Procure processos com porcentagens altas %wait (iowait), pois isso pode indicar processos que estão bloqueados aguardando E/S, o que também pode indicar saturação de disco.
  • Verifique se nenhum processo único consome 100% da CPU, pois isso pode indicar um aplicativo de thread único.

Estatísticas de memória do processo

Para coletar estatísticas de memória do processo, use a -r opção:

pidstat -r 1 2
Como ler a saída de estatísticas de memória

Aqui está um exemplo de saída de pidstat:

Linux 5.14.0-362.8.1.el9_3.x86_64 (alma9)       02/21/24        _x86_64_        (8 CPU)

# Time        UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
16:55:49        0      2199 119244.12      0.00   13.6G    7.4G  23.5%  stress-ng-vm
16:55:49        0      2200 392911.76      0.00   13.6G    9.3G  29.7%  stress-ng-vm
16:55:49        0      2211   1129.41      0.00   72.3M    3.2M   0.0%  stress-ng-iomix
16:55:49        0      2220      0.98      0.00   71.8M    2.4M   0.0%  stress-ng-iomix
16:55:49        0      2239   1129.41      0.00   72.3M    3.2M   0.0%  stress-ng-iomix
16:55:49        0      2240   1129.41      0.00   72.3M    3.2M   0.0%  stress-ng-iomix
16:55:49        0      2256      0.98      0.00   71.8M    2.4M   0.0%  stress-ng-iomix
16:55:49        0      2265   1129.41      0.00   72.3M    3.2M   0.0%  stress-ng-iomix

As métricas coletadas são:

  • minflt/s: Pequenas falhas por segundo. Essa métrica indica o número de páginas carregadas da memória do sistema (RAM).
  • mjflt/s: Falhas graves por segundo. Essa métrica indica o número de páginas carregadas do disco (SWAP).
  • VSZ: Memória virtual usada em bytes.
  • RSS: Memória residente usada (memória alocada real) em bytes.
  • %MEM: A porcentagem da memória total usada.
  • Command: O nome do processo.
Principais considerações
  • Procure falhas graves por segundo, pois esse valor indicaria um processo que está trocando páginas de ou para o disco. Esse comportamento pode indicar esgotamento de memória e levar a OOM eventos ou degradação de desempenho devido a trocas mais lentas.
  • Verifique se um único processo não consome 100% da memória disponível. Esse comportamento pode indicar um vazamento de memória.

Dica

A --human opção pode ser usada para exibir números em um formato legível por humanos (ou seja, KB, MB e GB).

Estatísticas de E/S do processo

Para coletar estatísticas de E/S do processo, use a -d opção:

pidstat -d 1 2

Aqui está um exemplo de saída de pidstat:


# Time        UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
16:55:50        0        86     55.4k      0.0B      0.0B       0  kworker/1:1-xfs-conv/sdb4
16:55:50        0      2201      4.0k    194.1k      0.0B       0  stress-ng-iomix
16:55:50        0      2202      0.0B     99.0k      0.0B       0  stress-ng-iomix
16:55:50        0      2203      0.0B     23.8k      0.0B       0  stress-ng-iomix
16:55:50        0      2204      0.0B     15.8k      0.0B       0  stress-ng-iomix
16:55:50        0      2212      0.0B    103.0k      0.0B       0  stress-ng-iomix
16:55:50        0      2213      4.0k     99.0k      0.0B       0  stress-ng-iomix
16:55:50        0      2215      0.0B    178.2k      0.0B       0  stress-ng-iomix
16:55:50        0      2216      7.9k    237.6k      0.0B       0  stress-ng-iomix
16:55:50        0      2218      0.0B     95.0k      0.0B       0  stress-ng-iomix
16:55:50        0      2221      0.0B     15.8k      0.0B       0  stress-ng-iomix

As métricas coletadas são:

  • kB_rd/s: Ler kilobytes por segundo.
  • kB_wr/s: Escreva kilobytes por segundo.
  • Command: O nome do processo.
Principais considerações
  • Procure processos únicos com altas taxas de leitura/gravação por segundo. Essas informações são mais diretrizes para processos com E/S do que para identificar problemas.

Dica

A --human opção pode ser usada para exibir números em um formato legível por humanos (ou seja, KB, MB e GB).

Ps

Por fim, o comando exibe os processos do ps sistema e pode ser classificado por CPU ou memória.

Para classificar %CPU e obter os 10 principais processos:

ps aux --sort=-%cpu | head -10
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root        2190 94.8  0.0  73524  5588 pts/1    R+   16:55   0:14 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        2200 56.8 43.1 14248092 14175632 pts/1 R+ 16:55   0:08 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        2192 50.6  0.0  73524  5836 pts/1    R+   16:55   0:07 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        2184 50.4  0.0  73524  5836 pts/1    R+   16:55   0:07 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        2182 44.3  0.0  73524  5808 pts/1    R+   16:55   0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        2187 43.4  0.0  73524  5708 pts/1    R+   16:55   0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        2199 42.9 33.0 14248092 10845272 pts/1 R+ 16:55   0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        2186 42.0  0.0  73524  5836 pts/1    R+   16:55   0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        2191 41.2  0.0  73524  5592 pts/1    R+   16:55   0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240

Para classificar %MEM e obter os 10 principais processos:

ps aux --sort=-%mem| head -10
       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root        2200 57.0 43.1 14248092 14175632 pts/1 R+ 16:55   0:08 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        2199 43.0 33.0 14248092 10871144 pts/1 R+ 16:55   0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        1231  0.2  0.1 336308 33764 ?        Sl   16:46   0:01 /usr/bin/python3 -u bin/WALinuxAgent-2.9.1.1-py3.8.egg -run-exthandlers
root         835  0.0  0.0 127076 24860 ?        Ssl  16:46   0:00 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid
root        1199  0.0  0.0  30164 15600 ?        Ss   16:46   0:00 /usr/bin/python3 -u /usr/sbin/waagent -daemon
root           1  0.2  0.0 173208 12356 ?        Ss   16:46   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 31
root         966  0.0  0.0 3102460 10936 ?       Sl   16:46   0:00 /var/lib/waagent/Microsoft.GuestConfiguration.ConfigurationforLinux-1.26.60/GCAgent/GC/gc_linux_service
panzer      1803  0.0  0.0  22360  8220 ?        Ss   16:49   0:00 /usr/lib/systemd/systemd --user
root        2180  0.0  0.0  73524  6968 pts/1    SL+  16:55   0:00 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240

Consolidar relatórios

O script Bash a seguir pode reunir todos os detalhes em uma única execução e anexar a saída a um arquivo para referência futura:

mpstat -P ALL 1 2 && vmstat -w 1 5 && uptime && free -h && swapon && iostat -dxtm 1 1 && lsblk && ls -l /dev/disk/azure && pidstat 1 1 -h --human && pidstat -r 1 1 -h --human && pidstat -d 1 1 -h --human && ps aux --sort=-%cpu | head -20 && ps aux --sort=-%mem | head -20

Para executar, crie um arquivo com o conteúdo anterior, adicione execute permissões executando chmod +x gather.sho e execute com sudo ./gather.sho .

Esse script salva a saída dos comandos em um arquivo localizado no mesmo diretório em que o script foi chamado.

Além disso, todos os comandos nos códigos de bloco do Bash abordados neste documento podem ser executados por meio da CLI do Azure usando a run-command extensão e analisando a saída para jq obter saídas semelhantes à execução dos comandos localmente.

az vm run-command invoke -g $MY_RESOURCE_GROUP_NAME --name $MY_VM_NAME --command-id RunShellScript --scripts "ls -l /dev/disk/azure" | jq -r '.value[0].message'

Aviso de isenção de responsabilidade para informações de terceiros

Os produtos de terceiros mencionados neste artigo são produzidos por empresas independentes da Microsoft. A Microsoft não oferece nenhuma garantia, implícita ou não, do desempenho ou da confiabilidade desses produtos.

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.