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
| Herramienta | Propósito |
|---|---|
execsnoop | Rastrear nuevos procesos |
opensnoop | Rastrear aperturas de archivos |
biolatency | Histogramas de latencia de E/S de bloques |
biosnoop | Rastreo de E/S de bloques por evento |
ext4slower | Operaciones lentas del sistema de archivos ext4 |
tcplife | Resúmenes de sesiones TCP |
tcpconnect | Rastrear conexiones TCP salientes |
tcpaccept | Rastrear conexiones TCP entrantes |
profile | Perfilador de muestreo de pilas de CPU |
runqlat | Latencia de cola de ejecución del planificador |
funccount | Contar llamadas a funciones del kernel/usuario |
softirqs | Distribución de tiempo de soft IRQ |
hardirqs | Distribución de tiempo de hard IRQ |
cachestat | Estadísticas de aciertos/fallos de caché de páginas |
memleak | Detector de fugas de memoria |