Red Hat Training

A Red Hat training course is available for RHEL 8

25.3. Utilização de ferramentas bcc selecionadas para análises de desempenho

Esta seção descreve como usar certos programas pré-criados da biblioteca da BPF Compiler Collection (BCC) para analisar de forma eficiente e segura o desempenho do sistema em cada evento. O conjunto de programas pré-criados na biblioteca do BCC pode servir como exemplos para a criação de programas adicionais.

Pré-requisitos

Usando o execsnoop para examinar os processos do sistema

  1. Executar o programa execsnoop em um terminal:

    # /usr/share/bcc/tools/execsnoop
  2. Em outro terminal executar, por exemplo:

    $ ls /usr/share/bcc/tools/doc/

    O acima exposto cria um processo de curta duração do comando ls.

  3. O terminal rodando execsnoop mostra a saída semelhante ao seguinte:

    PCOMM	PID    PPID   RET ARGS
    ls   	8382   8287     0 /usr/bin/ls --color=auto /usr/share/bcc/tools/doc/
    sed 	8385   8383     0 /usr/bin/sed s/^ *[0-9]\+ *//
    ...

    O programa execsnoop imprime uma linha de saída para cada novo processo, o que consome recursos do sistema. Ele até detecta processos de programas que rodam muito em breve, tais como ls, e a maioria das ferramentas de monitoramento não os registrariam.

    A saída execsnoop exibe os seguintes campos:

    • PCOMM - O nome do processo pai. (ls)
    • PID - A identificação do processo. (8382)
    • PPID - O ID do processo pai. (8287)
    • RET - O valor de retorno da chamada ao sistema exec() (0), que carrega o código do programa em novos processos.
    • ARGS - A localização do programa iniciado com argumentos.

Para ver mais detalhes, exemplos e opções para execsnoop, consulte o arquivo /usr/share/bcc/tools/doc/execsnoop_example.txt.

Para mais informações sobre exec(), consulte as páginas do manual exec(3).

Usando o opensnoop para rastrear quais arquivos um comando abre

  1. Executar o programa opensnoop em um terminal:

    # /usr/share/bcc/tools/opensnoop -n uname

    A saída de impressões acima para arquivos, que são abertos somente pelo processo do comando uname.

  2. Em outro terminal executar:

    $ uname

    O comando acima abre certos arquivos, que são capturados na próxima etapa.

  3. O terminal rodando opensnoop mostra a saída semelhante ao seguinte:

    PID    COMM 	FD ERR PATH
    8596   uname 	3  0   /etc/ld.so.cache
    8596   uname 	3  0   /lib64/libc.so.6
    8596   uname 	3  0   /usr/lib/locale/locale-archive
    ...

    O programa opensnoop observa a chamada do sistema open() em todo o sistema, e imprime uma linha de saída para cada arquivo que uname tentou abrir pelo caminho.

    A saída opensnoop exibe os seguintes campos:

    • PID - A identificação do processo. (8596)
    • COMM - O nome do processo. (uname)
    • FD - O descritor de arquivo - um valor que open() retorna para se referir ao arquivo aberto. (3)
    • ERR - Qualquer erro.
    • PATH - A localização dos arquivos que open() tentou abrir.

      Se um comando tentar ler um arquivo inexistente, então a coluna FD retorna -1 e a coluna ERR imprime um valor correspondente ao erro relevante. Como resultado, opensnoop pode ajudá-lo a identificar uma aplicação que não se comporta corretamente.

Para ver mais detalhes, exemplos e opções para opensnoop, consulte o arquivo /usr/share/bcc/tools/doc/opensnoop_example.txt.

Para mais informações sobre open(), consulte as páginas do manual open(2).

Utilização de biotop para examinar as operações de E/S no disco

  1. Executar o programa biotop em um terminal:

    # /usr/share/bcc/tools/biotop 30

    O comando permite monitorar os processos superiores, que realizam operações de E/S no disco. O argumento garante que o comando produzirá um resumo de 30 segundos.

    Nota

    Quando nenhum argumento é fornecido, a tela de saída, por padrão, é atualizada a cada 1 segundo.

  2. Em outro terminal executar, por exemplo :

    # dd if=/dev/vda of=/dev/zero

    O comando acima lê o conteúdo do dispositivo de disco rígido local e grava a saída para o arquivo /dev/zero. Esta etapa gera certo tráfego de E/S para ilustrar biotop.

  3. O terminal rodando biotop mostra a saída semelhante ao seguinte:

    PID    COMM             D MAJ MIN DISK       I/O  Kbytes     AVGms
    9568   dd               R 252 0   vda      16294 14440636.0  3.69
    48     kswapd0          W 252 0   vda       1763 120696.0    1.65
    7571   gnome-shell      R 252 0   vda        834 83612.0     0.33
    1891   gnome-shell      R 252 0   vda       1379 19792.0     0.15
    7515   Xorg             R 252 0   vda        280  9940.0     0.28
    7579   llvmpipe-1       R 252 0   vda        228  6928.0     0.19
    9515   gnome-control-c  R 252 0   vda         62  6444.0     0.43
    8112   gnome-terminal-  R 252 0   vda         67  2572.0     1.54
    7807   gnome-software   R 252 0   vda         31  2336.0     0.73
    9578   awk              R 252 0   vda         17  2228.0     0.66
    7578   llvmpipe-0       R 252 0   vda        156  2204.0     0.07
    9581   pgrep            R 252 0   vda         58  1748.0     0.42
    7531   InputThread      R 252 0   vda         30  1200.0     0.48
    7504   gdbus            R 252 0   vda          3  1164.0     0.30
    1983   llvmpipe-1       R 252 0   vda         39   724.0     0.08
    1982   llvmpipe-0       R 252 0   vda         36   652.0     0.06
    ...

    A saída biotop exibe os seguintes campos:

    • PID - A identificação do processo. (9568)
    • COMM - O nome do processo. (dd)
    • DISK - O disco que realiza as operações lidas. (vda)
    • I/O - O número de operações lidas realizadas. (16294)
    • Kbytes - A quantidade de Kbytes alcançados pelas operações lidas. (14,440,636)
    • AVGms - O tempo médio de E/S das operações lidas. (3.69)

Para ver mais detalhes, exemplos e opções para biotop, consulte o arquivo /usr/share/bcc/tools/doc/biotop_example.txt.

Para mais informações sobre dd, consulte as páginas do manual dd(1).

Usando xfsslower para expor operações de sistema de arquivo inesperadamente lentas

  1. Executar o programa xfsslower em um terminal:

    # /usr/share/bcc/tools/xfsslower 1

    O comando acima mede o tempo que o sistema de arquivos XFS gasta em operações de leitura, escrita, abertura ou sincronização (fsync). O argumento 1 garante que o programa mostra apenas as operações que são mais lentas do que 1 ms.

    Nota

    Quando nenhum argumento é fornecido, xfsslower por padrão exibe operações mais lentas do que 10 ms.

  2. Em outro terminal executar, por exemplo, o seguinte:

    $ vim text

    O comando acima cria um arquivo de texto no editor vim para iniciar certa interação com o sistema de arquivos XFS.

  3. O terminal rodando xfsslower mostra algo semelhante ao salvar o arquivo da etapa anterior:

    TIME     COMM           PID    T BYTES   OFF_KB   LAT(ms) FILENAME
    13:07:14 b'bash'        4754   R 256     0           7.11 b'vim'
    13:07:14 b'vim'         4754   R 832     0           4.03 b'libgpm.so.2.1.0'
    13:07:14 b'vim'         4754   R 32      20          1.04 b'libgpm.so.2.1.0'
    13:07:14 b'vim'         4754   R 1982    0           2.30 b'vimrc'
    13:07:14 b'vim'         4754   R 1393    0           2.52 b'getscriptPlugin.vim'
    13:07:45 b'vim'         4754   S 0       0           6.71 b'text'
    13:07:45 b'pool'        2588   R 16      0           5.58 b'text'
    ...

    Cada linha acima representa uma operação no sistema de arquivo, que levou mais tempo do que um determinado limite. xfsslower é bom em expor possíveis problemas no sistema de arquivo, que podem tomar a forma de operações inesperadamente lentas.

    A saída xfsslower exibe os seguintes campos:

    • COMM - O nome do processo. (b’bash')
    • T - O tipo de operação. (R)

      • Read
      • Writo
      • Sync
    • OFF_KB - O arquivo compensado em KB. (0)
    • FILENAME - O arquivo sendo lido, escrito, ou sincronizado.

Para ver mais detalhes, exemplos e opções para xfsslower, consulte o arquivo /usr/share/bcc/tools/doc/xfsslower_example.txt.

Para mais informações sobre fsync, consulte as páginas do manual fsync(2).