Red Hat Training

A Red Hat training course is available for RHEL 8

25.3. Utilización de determinadas herramientas bcc para el análisis del rendimiento

Esta sección describe cómo utilizar ciertos programas precreados de la biblioteca BPF Compiler Collection (BCC) para analizar de forma eficiente y segura el rendimiento del sistema en base a cada evento. El conjunto de programas precreados en la biblioteca BCC puede servir de ejemplo para la creación de programas adicionales.

Requisitos previos

Uso de execsnoop para examinar los procesos del sistema

  1. Ejecute el programa execsnoop en un terminal:

    # /usr/share/bcc/tools/execsnoop
  2. En otro terminal ejecutar por ejemplo:

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

    Lo anterior crea un proceso de corta duración del comando ls.

  3. El terminal que ejecuta execsnoop muestra una salida similar a la siguiente:

    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]\+ *//
    ...

    El programa execsnoop imprime una línea de salida por cada nuevo proceso, que consume recursos del sistema. Incluso detecta procesos de programas que se ejecutan muy poco tiempo, como ls, y la mayoría de las herramientas de monitorización no los registrarían.

    La salida de execsnoop muestra los siguientes campos:

    • PCOMM - El nombre del proceso padre. (ls)
    • PID - El ID del proceso. (8382)
    • PPID - El ID del proceso padre. (8287)
    • RET - El valor de retorno de la llamada al sistema exec() (0), que carga el código del programa en nuevos procesos.
    • ARGS - La ubicación del programa iniciado con argumentos.

Para ver más detalles, ejemplos y opciones de execsnoop, consulte el archivo /usr/share/bcc/tools/doc/execsnoop_example.txt.

Para más información sobre exec(), consulte las páginas del manual exec(3).

Uso de opensnoop para rastrear qué archivos abre un comando

  1. Ejecute el programa opensnoop en un terminal:

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

    Lo anterior imprime la salida para los archivos, que son abiertos sólo por el proceso del comando uname.

  2. En otra terminal ejecutar:

    $ uname

    El comando anterior abre ciertos archivos, que se capturan en el siguiente paso.

  3. El terminal que ejecuta opensnoop muestra una salida similar a la siguiente:

    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
    ...

    El programa opensnoop vigila la llamada al sistema open() en todo el sistema, e imprime una línea de salida para cada archivo que uname intentó abrir en el camino.

    La salida de opensnoop muestra los siguientes campos:

    • PID - El ID del proceso. (8596)
    • COMM - El nombre del proceso. (uname)
    • FD - El descriptor del archivo - un valor que open() devuelve para referirse al archivo abierto. (3)
    • ERR - Cualquier error.
    • PATH - La ubicación de los archivos que open() intentó abrir.

      Si un comando intenta leer un archivo inexistente, la columna FD devuelve -1 y la columna ERR imprime un valor correspondiente al error en cuestión. Como resultado, opensnoop puede ayudarle a identificar una aplicación que no se comporta correctamente.

Para ver más detalles, ejemplos y opciones de opensnoop, consulte el archivo /usr/share/bcc/tools/doc/opensnoop_example.txt.

Para más información sobre open(), consulte las páginas del manual open(2).

Uso de biotop para examinar las operaciones de E/S en el disco

  1. Ejecute el programa biotop en un terminal:

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

    El comando permite supervisar los procesos principales, que realizan operaciones de E/S en el disco. El argumento asegura que el comando producirá un resumen de 30 segundos.

    Nota

    Si no se proporciona ningún argumento, la pantalla de salida se actualiza por defecto cada 1 segundo.

  2. En otro terminal ejecute por ejemplo :

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

    El comando anterior lee el contenido del dispositivo de disco duro local y escribe la salida en el archivo /dev/zero. Este paso genera cierto tráfico de E/S para ilustrar biotop.

  3. El terminal que ejecuta biotop muestra una salida similar a la siguiente:

    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
    ...

    La salida de biotop muestra los siguientes campos:

    • PID - El ID del proceso. (9568)
    • COMM - El nombre del proceso. (dd)
    • DISK - El disco que realiza las operaciones de lectura. (vda)
    • I/O - El número de operaciones de lectura realizadas. (16294)
    • Kbytes - La cantidad de Kbytes alcanzados por las operaciones de lectura. (14,440,636)
    • AVGms - El tiempo medio de E/S de las operaciones de lectura. (3.69)

Para ver más detalles, ejemplos y opciones de biotop, consulte el archivo /usr/share/bcc/tools/doc/biotop_example.txt.

Para más información sobre dd, consulte las páginas del manual dd(1).

Uso de xfsslower para exponer operaciones del sistema de archivos inesperadamente lentas

  1. Ejecute el programa xfsslower en un terminal:

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

    El comando anterior mide el tiempo que el sistema de archivos XFS emplea en realizar operaciones de lectura, escritura, apertura o sincronización (fsync). El argumento 1 asegura que el programa muestra sólo las operaciones que son más lentas que 1 ms.

    Nota

    Cuando no se proporcionan argumentos, xfsslower muestra por defecto las operaciones más lentas de 10 ms.

  2. En otro terminal ejecute, por ejemplo, lo siguiente:

    $ vim text

    El comando anterior crea un archivo de texto en el editor vim para iniciar cierta interacción con el sistema de archivos XFS.

  3. El terminal que ejecuta xfsslower muestra algo similar al guardar el archivo del paso 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 línea de arriba representa una operación en el sistema de archivos, que tomó más tiempo que un determinado umbral. xfsslower es bueno para exponer posibles problemas del sistema de archivos, que pueden tomar la forma de operaciones inesperadamente lentas.

    La salida de xfsslower muestra los siguientes campos:

    • COMM - El nombre del proceso. (b’bash')
    • T - El tipo de operación. (R)

      • Read
      • Write
      • Sync
    • OFF_KB - El desplazamiento del archivo en KB. (0)
    • FILENAME - El archivo que se está leyendo, escribiendo o sincronizando.

Para ver más detalles, ejemplos y opciones de xfsslower, consulte el archivo /usr/share/bcc/tools/doc/xfsslower_example.txt.

Para más información sobre fsync, consulte las páginas del manual fsync(2).