Ir al contenido

Comandos de BCC Tools

BCC (BPF Compiler Collection) es un conjunto de herramientas para crear programas eficientes de rastreo y manipulación del kernel usando eBPF. Incluye más de 100 herramientas listas para usar en análisis de rendimiento, redes y seguridad.

Instalación

Linux/Ubuntu

# Ubuntu 22.04+
sudo apt install bpfcc-tools linux-headers-$(uname -r)

# Fedora
sudo dnf install bcc-tools

# On Ubuntu, tools are installed with -bpfcc suffix
# e.g., execsnoop-bpfcc, opensnoop-bpfcc
# On Fedora/RHEL, tools are in /usr/share/bcc/tools/

# Verify installation
sudo execsnoop-bpfcc --help 2>&1 | head -5

Rastreo de procesos

execsnoop — Rastrear nuevos procesos

# Rastrear todas las ejecuciones de nuevos procesos
sudo execsnoop-bpfcc

# Incluir marcas de tiempo
sudo execsnoop-bpfcc -T

# Incluir llamadas exec fallidas
sudo execsnoop-bpfcc -x

# Filtrar por nombre de proceso
sudo execsnoop-bpfcc -n nginx

# Rastrear para un UID específico
sudo execsnoop-bpfcc -u 1000

# Mostrar variables de entorno
sudo execsnoop-bpfcc --max-args 20

opensnoop — Rastrear aperturas de archivos

# Rastrear todas las llamadas open() en el sistema
sudo opensnoop-bpfcc

# Rastrear aperturas para un PID específico
sudo opensnoop-bpfcc -p 1234

# Mostrar solo aperturas fallidas
sudo opensnoop-bpfcc -x

# Filtrar por nombre de archivo
sudo opensnoop-bpfcc -f /etc/passwd

# Incluir marcas de tiempo
sudo opensnoop-bpfcc -T

# Rastrear una duración específica (segundos)
sudo opensnoop-bpfcc -d 30

pidstat (BCC) — Uso de recursos por proceso

# Rastrear estadísticas de recursos del proceso
sudo pidstat-bpfcc

# Monitorear PID específico
sudo pidstat-bpfcc -p 1234

Análisis de disco y E/S

biolatency — Latencia de E/S de bloques

# Mostrar latencia de E/S de bloques como histograma
sudo biolatency-bpfcc

# Mostrar histogramas por disco
sudo biolatency-bpfcc -D

# Incluir marcas de tiempo
sudo biolatency-bpfcc -T

# Mostrar latencia en milisegundos
sudo biolatency-bpfcc -m

# Salida cada 5 segundos
sudo biolatency-bpfcc 5

# Mostrar 10 intervalos y salir
sudo biolatency-bpfcc 5 10

# Solo tiempo en cola (no tiempo de servicio)
sudo biolatency-bpfcc -Q

ext4slower — Rastrear operaciones ext4 lentas

# Mostrar operaciones ext4 más lentas que 10ms (por defecto)
sudo ext4slower-bpfcc

# Umbral personalizado en milisegundos
sudo ext4slower-bpfcc 1

# Mostrar todas las operaciones (umbral 0)
sudo ext4slower-bpfcc 0

# Incluir marcas de tiempo
sudo ext4slower-bpfcc -T

biosnoop — Rastreo de E/S de bloques

# Rastrear cada E/S de bloques con latencia
sudo biosnoop-bpfcc

# Incluir tiempo en cola
sudo biosnoop-bpfcc -Q

# Filtrar por disco
sudo biosnoop-bpfcc -d sda

CPU y planificación

profile — Perfilador de CPU

# Perfilar pilas del kernel a 49 Hz durante 10 segundos
sudo profile-bpfcc -f 49 10

# Perfilar solo pilas del espacio de usuario
sudo profile-bpfcc -U

# Perfilar solo pilas del kernel
sudo profile-bpfcc -K

# Perfilar un PID específico
sudo profile-bpfcc -p 1234

# Salida en formato plegado (para flame graphs)
sudo profile-bpfcc -f 99 30 > out.folded

runqlat — Latencia de la cola de ejecución del planificador

# Mostrar latencia de la cola de ejecución como histograma
sudo runqlat-bpfcc

# Histogramas por PID
sudo runqlat-bpfcc -P

# Mostrar en milisegundos
sudo runqlat-bpfcc -m

# Salida cada 5 segundos
sudo runqlat-bpfcc 5

# Incluir marcas de tiempo
sudo runqlat-bpfcc -T

softirqs — Tiempo de interrupciones de software

# Mostrar tiempo de eventos soft IRQ como histogramas
sudo softirqs-bpfcc

# Mostrar distribución a lo largo del tiempo
sudo softirqs-bpfcc -T

# Salida cada 5 segundos
sudo softirqs-bpfcc 5

# Mostrar solo conteos (no tiempo)
sudo softirqs-bpfcc -N

hardirqs — Tiempo de interrupciones de hardware

# Mostrar tiempo de eventos hard IRQ como histogramas
sudo hardirqs-bpfcc

# Salida cada 5 segundos
sudo hardirqs-bpfcc 5

# Mostrar solo conteos
sudo hardirqs-bpfcc -N

# Incluir marcas de tiempo
sudo hardirqs-bpfcc -T

Análisis de red

tcplife — Seguimiento de sesiones TCP

# Rastrear sesiones TCP con duración y rendimiento
sudo tcplife-bpfcc

# Mostrar marcas de tiempo
sudo tcplife-bpfcc -T

# Filtrar por puerto local
sudo tcplife-bpfcc -L 80

# Filtrar por puerto remoto
sudo tcplife-bpfcc -D 443

# Filtrar por PID
sudo tcplife-bpfcc -p 1234

# Salida amplia (direcciones completas)
sudo tcplife-bpfcc -w

tcpconnect — Rastrear conexiones salientes

# Rastrear todas las llamadas TCP connect()
sudo tcpconnect-bpfcc

# Incluir marcas de tiempo
sudo tcpconnect-bpfcc -T

# Incluir UID
sudo tcpconnect-bpfcc -U

# Filtrar por puerto de destino
sudo tcpconnect-bpfcc -P 443

# Contar conexiones por destino
sudo tcpconnect-bpfcc -c

tcpaccept — Rastrear conexiones entrantes

# Rastrear todas las llamadas TCP accept()
sudo tcpaccept-bpfcc

# Incluir marcas de tiempo
sudo tcpaccept-bpfcc -T

# Filtrar por puerto
sudo tcpaccept-bpfcc -P 80

Rastreo de funciones

funccount — Contar llamadas a funciones

# Contar llamadas a funciones del kernel que coincidan con un patrón
sudo funccount-bpfcc 'tcp_send*'

# Contar llamadas en intervalos de 5 segundos
sudo funccount-bpfcc -i 5 'vfs_*'

# Contar llamadas a funciones del espacio de usuario
sudo funccount-bpfcc 'c:malloc'

# Contar para un PID específico
sudo funccount-bpfcc -p 1234 'c:malloc'

# Contar con marcas de tiempo
sudo funccount-bpfcc -T 'tcp_*'

trace — Rastreo flexible de eventos

# Rastrear una función del kernel con valor de retorno
sudo trace-bpfcc 'do_sys_openat2 "%s", arg2'

# Rastrear con un filtro
sudo trace-bpfcc 'sys_read (arg3 > 1024) "read %d bytes", arg3'

# Rastrear una función del espacio de usuario
sudo trace-bpfcc 'r:c:malloc "size=%d, ret=%p", arg1, retval'

# Rastrear múltiples eventos
sudo trace-bpfcc 'sys_open "%s", arg2' 'sys_read "fd=%d size=%d", arg1, arg3'

argdist — Distribución de argumentos

# Histograma de valores de retorno de read()
sudo argdist-bpfcc -H 'r::__x64_sys_read():int:$retval'

# Contar tamaños de malloc como histograma
sudo argdist-bpfcc -H 'p:c:malloc(size_t size):size_t:size'

# Conteo de frecuencia de valores retornados
sudo argdist-bpfcc -C 'r::__x64_sys_read():int:$retval'

# Filtrar por PID
sudo argdist-bpfcc -p 1234 -H 'r::__x64_sys_read():int:$retval'

Memoria y caché

cachestat — Aciertos/fallos de caché de páginas

# Mostrar ratio de aciertos de caché de páginas cada segundo
sudo cachestat-bpfcc

# Intervalo personalizado (5 segundos)
sudo cachestat-bpfcc 5

# Incluir marcas de tiempo
sudo cachestat-bpfcc -T

memleak — Detector de fugas de memoria

# Detectar fugas de memoria en un proceso
sudo memleak-bpfcc -p 1234

# Muestrear cada 5 segundos, mostrar top 10
sudo memleak-bpfcc -p 1234 5 10

# Rastrear fugas de memoria del kernel
sudo memleak-bpfcc

# Incluir trazas de pila (profundidad 8)
sudo memleak-bpfcc -p 1234 -d 8

Combinación con Flame Graphs

# Generar flame graph de CPU con BCC profile
sudo profile-bpfcc -f 99 30 > out.folded
./flamegraph.pl out.folded > cpu_flamegraph.svg

# Generar flame graph off-CPU
sudo offcputime-bpfcc -f 30 > offcpu.folded
./flamegraph.pl --color=io --countname=us offcpu.folded > offcpu_flamegraph.svg

Referencia rápida

HerramientaPropósito
execsnoopRastrear nuevos procesos
opensnoopRastrear aperturas de archivos
biolatencyHistogramas de latencia de E/S de bloques
biosnoopRastreo de E/S de bloques por evento
ext4slowerOperaciones lentas del sistema de archivos ext4
tcplifeResúmenes de sesiones TCP
tcpconnectRastrear conexiones TCP salientes
tcpacceptRastrear conexiones TCP entrantes
profilePerfilador de muestreo de pilas de CPU
runqlatLatencia de cola de ejecución del planificador
funccountContar llamadas a funciones del kernel/usuario
softirqsDistribución de tiempo de soft IRQ
hardirqsDistribución de tiempo de hard IRQ
cachestatEstadísticas de aciertos/fallos de caché de páginas
memleakDetector de fugas de memoria