{"id":20682,"date":"2026-08-15T18:19:23","date_gmt":"2026-08-15T16:19:23","guid":{"rendered":"https:\/\/webhosting.de\/bcc-tools-linux-performance-ebpf-observability-focus\/"},"modified":"2026-08-15T18:19:23","modified_gmt":"2026-08-15T16:19:23","slug":"bcc-herramientas-linux-rendimiento-ebpf-observabilidad-enfoque","status":"publish","type":"post","link":"https:\/\/webhosting.de\/es\/bcc-tools-linux-performance-ebpf-observability-focus\/","title":{"rendered":"bcc tools en la pr\u00e1ctica: gu\u00eda pr\u00e1ctica para la ingenier\u00eda de rendimiento en Linux con eBPF"},"content":{"rendered":"<p>Te voy a explicar paso a paso c\u00f3mo <strong>Herramientas de BCC<\/strong> utilizo eBPF para identificar y resolver r\u00e1pidamente los cuellos de botella en los servidores Linux. Para ello, utilizo flujos de trabajo pr\u00e1cticos, mido las latencias reales en el n\u00facleo y relaciono los eventos de la CPU, las E\/S y la red para obtener una <strong>borrar<\/strong> An\u00e1lisis de las causas.<\/p>\n\n<h2>Puntos centrales<\/h2>\n<ul>\n  <li><strong>eBPF<\/strong> Ofrece un seguimiento detallado con una carga m\u00ednima.<\/li>\n  <li><strong>Herramientas de BCC<\/strong> abarcan la CPU, las E\/S, la red y los procesos.<\/li>\n  <li><strong>Cercano a la producci\u00f3n<\/strong> Se puede utilizar sin necesidad de modificar la aplicaci\u00f3n.<\/li>\n  <li><strong>Lista de control<\/strong> con diez herramientas para empezar.<\/li>\n  <li><strong>Seguridad<\/strong> mediante Verifier y unas pol\u00edticas claras.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-performance-ebpf-4976.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>\u00bfPor qu\u00e9 utilizar eBPF para la ingenier\u00eda de rendimiento en Linux?<\/h2>\n<p>Busco <strong>eBPF<\/strong>, porque quiero medir los eventos del kernel de forma segura, selectiva y con muy poca sobrecarga. Las herramientas cl\u00e1sicas muestran totales, pero rara vez explican por qu\u00e9 los hilos est\u00e1n en espera, por qu\u00e9 se reenv\u00edan los paquetes o por qu\u00e9 se bloquea la E\/S; eBPF cubre esta laguna con <strong>concreto<\/strong> Eventos. Los programas se ejecutan en el n\u00facleo, el verificador los comprueba previamente y puedo iniciarlos sin necesidad de reiniciar el sistema. De este modo, correlaciono las llamadas del espacio de usuario con las rutas del n\u00facleo y obtengo una visi\u00f3n general que permite realizar optimizaciones inmediatas. Quien desee profundizar en el tema, encontrar\u00e1 una visi\u00f3n general en mi breve introducci\u00f3n a la <a href=\"https:\/\/webhosting.de\/es\/ebpf-rendimiento-analisis-linux-rastreo-servidor-supervision-observabilidad\/\">An\u00e1lisis del rendimiento de eBPF<\/a>, que describe la interacci\u00f3n entre el rastreo y la observabilidad.<\/p>\n\n<h2>\u00bfQu\u00e9 son las herramientas de BCC y d\u00f3nde las puedo encontrar?<\/h2>\n<p>El <strong>cco<\/strong> Las herramientas \u00abtools\u00bb son programas de diagn\u00f3stico ya preparados basados en eBPF y suelen encontrarse en \/usr\/share\/bcc\/tools. Las ejecuto directamente desde el shell, obtengo resultados claros en la salida est\u00e1ndar y no tengo que modificar mis aplicaciones. La colecci\u00f3n abarca procesos, llamadas al sistema, sistemas de archivos, E\/S de bloques, red, programadores y an\u00e1lisis de rendimiento, por lo que resulta adecuada para <strong>productivo<\/strong> An\u00e1lisis. Como activo el rastreo de forma selectiva, la influencia es m\u00ednima y los errores de medici\u00f3n debidos a la supervisi\u00f3n son insignificantes. Para casos m\u00e1s complejos, complemento las herramientas con mi propio eBPF o utilizo adem\u00e1s perfiles de muestreo.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/bcc_tools_linux_eBPF_7438.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Instalaci\u00f3n y requisitos<\/h2>\n<p>Voy a instalar la <strong>cco<\/strong> Herramientas disponibles a trav\u00e9s del gestor de paquetes (bcc-tools o bpfcc-tools) en las distribuciones m\u00e1s habituales. Se requiere un kernel con soporte para eBPF (a partir de la versi\u00f3n 4.x, preferiblemente 4.9 o superior), funciones BPF activadas y permisos suficientes para cargar los programas. En servidores de producci\u00f3n, compruebo previamente las capacidades de eBPF del n\u00facleo y de la distribuci\u00f3n en un entorno de prueba, para que las mediciones posteriores <strong>fiable<\/strong> funcionan. Evito los perfiles de seguridad que bloquean completamente eBPF mediante pol\u00edticas adaptadas. Las breves instrucciones sobre <a href=\"https:\/\/webhosting.de\/es\/ebpf-herramientas-de-analisis-de-linux-supervision-de-servidores-informacion-detallada\/\">Herramientas de an\u00e1lisis de eBPF<\/a>.<\/p>\n\n<h2>Antes de la salida: comprobaciones del sistema y de seguridad<\/h2>\n<p>Antes de realizar mediciones en producci\u00f3n, compruebo las capacidades b\u00e1sicas del host. De este modo, evito errores iniciales y obtengo resultados reproducibles.<\/p>\n<ul>\n  <li>Comprobar las caracter\u00edsticas del n\u00facleo: <code>uname -r<\/code> y las funciones BPF disponibles (por ejemplo, mediante Feature-Check). Son importantes kprobes\/tracepoints, BTF (para obtener informaci\u00f3n estable sobre los tipos) y los eventos perf.<\/li>\n  <li>Derechos y pol\u00edticas: Me aseguro de que solo los usuarios autorizados puedan cargar eBPF (CAP_BPF\/CAP_SYS_ADMIN o la pol\u00edtica correspondiente) y de que los perfiles LSM no bloqueen la carga.<\/li>\n  <li>Par\u00e1metros del sistema: <code>kernel.unprivileged_bpf_disabled<\/code> Suele estar activo en entornos productivos. Por eso, trabajo deliberadamente desde sesiones seguras y con un control de auditor\u00eda claro.<\/li>\n  <li>Rutas transparentes: Considero que los directorios como <code>\/sys\/kernel\/debug\/tracing<\/code> y <code>\/sys\/fs\/bpf<\/code> en mente, para eliminar los artefactos tras las mediciones.<\/li>\n<\/ul>\n<p>Esta rigurosidad me permite realizar mediciones de forma precisa y reproducible, sin efectos secundarios.<\/p>\n\n<h2>Gu\u00eda pr\u00e1ctica: Las diez primeras herramientas<\/h2>\n<p>Para realizar una comprobaci\u00f3n r\u00e1pida del rendimiento, sigo un orden fijo. De este modo, delimito con claridad las causas relacionadas con la CPU, las E\/S o la red, y decido si debo profundizar en las pilas o en los tiempos de respuesta. La tabla muestra la funci\u00f3n principal de las herramientas y la cuesti\u00f3n que pretendo aclarar con ellas. Al principio mantengo la duraci\u00f3n de la ejecuci\u00f3n breve y repito las mediciones en cuanto tengo alguna sospecha <strong>confirmar<\/strong> quiero. As\u00ed evito los puntos ciegos y no pierdo tiempo en situaciones de emergencia <strong>Incidentes<\/strong>.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Herramienta<\/th>\n      <th>Observado<\/th>\n      <th>Pregunta t\u00edpica<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>execsnoop<\/td>\n      <td>Nuevos procesos<\/td>\n      <td>\u00bfQui\u00e9n crea puestos de trabajo ef\u00edmeros que generan carga?<\/td>\n    <\/tr>\n    <tr>\n      <td>opensnoop<\/td>\n      <td>Apertura de archivos<\/td>\n      <td>\u00bfQu\u00e9 rutas se abren o se registran constantemente?<\/td>\n    <\/tr>\n    <tr>\n      <td>ext4 m\u00e1s lento (xfs*, btrfs*, zfs*)<\/td>\n      <td>Operaciones FS lentas<\/td>\n      <td>\u00bfQu\u00e9 visitas presentan latencias elevadas por volumen?<\/td>\n    <\/tr>\n    <tr>\n      <td>biolatencia<\/td>\n      <td>Distribuci\u00f3n de E\/S en bloques<\/td>\n      <td>\u00bfSe producen picos de latencia espor\u00e1dicos o continuos?<\/td>\n    <\/tr>\n    <tr>\n      <td>biosnoop<\/td>\n      <td>Solicitudes de E\/S individuales<\/td>\n      <td>\u00bfQu\u00e9 proceso hace que determinados dispositivos dejen de funcionar?<\/td>\n    <\/tr>\n    <tr>\n      <td>cachestat<\/td>\n      <td>Comportamiento de la cach\u00e9 de p\u00e1ginas<\/td>\n      <td>\u00bfMerece la pena aumentar la memoria RAM o la aplicaci\u00f3n sufre fallos?<\/td>\n    <\/tr>\n    <tr>\n      <td>tcpconnect<\/td>\n      <td>Nuevas conexiones TCP<\/td>\n      <td>\u00bfQui\u00e9n recurre a qu\u00e9 servicio y con qu\u00e9 frecuencia?<\/td>\n    <\/tr>\n    <tr>\n      <td>tcpaccept<\/td>\n      <td>Conexiones aceptadas<\/td>\n      <td>\u00bfQu\u00e9 sockets de servidor est\u00e1n sometidos a una carga elevada?<\/td>\n    <\/tr>\n    <tr>\n      <td>tcpretrans<\/td>\n      <td>Retransmisiones<\/td>\n      <td>\u00bfLa p\u00e9rdida de paquetes indica que las rutas son inestables?<\/td>\n    <\/tr>\n    <tr>\n      <td>runqlat<\/td>\n      <td>Latencias del programador<\/td>\n      <td>\u00bfLos hilos esperan demasiado tiempo para obtener tiempo de CPU?<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n<p>Tambi\u00e9n utilizo <strong>perfiles<\/strong> para detectar puntos cr\u00edticos en el espacio de usuario o del n\u00facleo y agregar pilas de llamadas. De este modo, detecto expresiones regulares costosas, controladores ineficientes o spinlocks, que luego corrijo en el c\u00f3digo o en la configuraci\u00f3n. Utilizo intervalos de muestreo cortos y comparo varias ejecuciones para detectar valores at\u00edpicos <strong>visible<\/strong> . Esta combinaci\u00f3n de visi\u00f3n general y an\u00e1lisis en profundidad me ahorra mucho tiempo de an\u00e1lisis. A continuaci\u00f3n, vuelvo a probar la optimizaci\u00f3n con la misma carga.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-performance-ebpf-tools-4528.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Ampliaci\u00f3n: hacer visibles las operaciones fuera de la CPU, los bloqueos y los tiempos de espera<\/h2>\n<p>No toda la latencia elevada est\u00e1 relacionada con la CPU. A menudo, los hilos \u201efuera de la CPU\u201c esperan a que se produzcan operaciones de E\/S, bloqueos o activaciones. En estos casos, resultan \u00fatiles las herramientas y los perfiles complementarios de bcc:<\/p>\n<ul>\n  <li>An\u00e1lisis \u00abOff-CPU\u00bb: Mido cu\u00e1nto tiempo pasan los hilos fuera de la CPU y qu\u00e9 pilas conducen hasta all\u00ed. Esto permite diferenciar el tiempo de c\u00e1lculo del tiempo de espera y muestra los bloqueos.<\/li>\n  <li>Contendencia de bloqueos: analizo espec\u00edficamente los bloqueos cr\u00edticos del n\u00facleo y del espacio de usuario. Los tiempos de retenci\u00f3n prolongados o las altas tasas de contendencia indican puntos de serializaci\u00f3n que procuro eliminar (por ejemplo, mediante fragmentaci\u00f3n, una granularidad m\u00e1s fina u otras estructuras de datos).<\/li>\n  <li>Rutas de activaci\u00f3n: las latencias entre \u201ese ha activado\u201c y \u201evuelve a funcionar\u201c revelan problemas de programaci\u00f3n y prioridades, o un tama\u00f1o excesivo de los grupos de trabajadores.<\/li>\n<\/ul>\n<p>Correlaciono estas se\u00f1ales con <strong>runqlat<\/strong> y <strong>biolatencia<\/strong>, para distinguir entre causas relacionadas con la memoria, las E\/S y el programador.<\/p>\n\n<h2>Higiene en las mediciones: filtros, duraci\u00f3n, umbrales<\/h2>\n<p>Para que las mediciones de eBPF sigan siendo reproducibles, sigo tres reglas b\u00e1sicas:<\/p>\n<ul>\n  <li>De forma breve y concisa: al principio, solo dejo que las herramientas se ejecuten durante un breve periodo de tiempo (por ejemplo, entre 10 y 30 segundos) y me centro en los PID, contenedores o sockets sospechosos.<\/li>\n  <li>Establecer umbrales: con las herramientas \u201e*slower*\u201c, filtro las latencias peque\u00f1as para reducir el ruido y ver solo las llamadas problem\u00e1ticas.<\/li>\n  <li>Limitar la tasa: Utilizo filtros selectivos (por ejemplo, nombre del proceso, TID, puertos) para mantener bajas las tasas de eventos. De este modo, la sobrecarga es m\u00ednima y evito que se pierdan eventos.<\/li>\n<\/ul>\n<p>Solo cuando veo un patr\u00f3n, prolongo la duraci\u00f3n o ampl\u00edo el alcance. De este modo consigo <strong>limpiar<\/strong> y muestras representativas.<\/p>\n\n<h2>Escenario pr\u00e1ctico 1: Carga de la CPU inexplicablemente alta<\/h2>\n<p>Si el indicador de la CPU muestra valores elevados de forma constante, empiezo por <strong>execsnoop<\/strong>, para detectar procesos de corta duraci\u00f3n. A continuaci\u00f3n, mido con runqlat cu\u00e1nto tiempo esperan los hilos a que la CPU les asigne tiempo de ejecuci\u00f3n y compruebo si las colas de ejecuci\u00f3n est\u00e1n saturadas o si las prioridades son inadecuadas. Si se observan tiempos de espera excesivos, reduzco el n\u00famero de trabajadores, modifico los grupos de hilos o distribuyo mejor las tareas programadas para que el programador <strong>agarra<\/strong> puedo. Con \u00abprofile\u00bb recopilo \u00abstacks\u00bb y localizo los verdaderos puntos cr\u00edticos en las bibliotecas y en mi propio c\u00f3digo. Solo cuando re\u00fano toda esta informaci\u00f3n, tomo decisiones sobre l\u00edmites, recolecci\u00f3n de basura, afinidades o opciones del compilador.<\/p>\n\n<h2>Escenario pr\u00e1ctico 2: Latencias de E\/S y aplicaciones lentas<\/h2>\n<p>Si los usuarios se quejan de que el sistema se cuelga con una baja carga de la CPU, compruebo con <strong>ext4 m\u00e1s lento<\/strong> Llamadas lentas al sistema de archivos por proceso. A continuaci\u00f3n, utilizo \u00abbiolatency\u00bb para analizar la distribuci\u00f3n de los tiempos de E\/S por bloques por dispositivo, con el fin de detectar picos espor\u00e1dicos o cuellos de botella persistentes. \u00abbiosnoop\u00bb me muestra si un servicio concreto est\u00e1 generando un n\u00famero excesivo de peque\u00f1as escrituras y, con ello, provocando colas que ralentizan a otros procesos. Con \u00abcachestat\u00bb compruebo si la cach\u00e9 de p\u00e1ginas acierta o si se producen fallos. <strong>dominar<\/strong> y que m\u00e1s RAM ser\u00eda de ayuda. Al final, decidir\u00e9 si merece la pena optar por escrituras por lotes, b\u00faferes m\u00e1s grandes o cambiar a un almacenamiento m\u00e1s r\u00e1pido.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/tech_office_nachtarbeit_1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Escenario pr\u00e1ctico 3: Rutas de red y microservicios<\/h2>\n<p>En entornos distribuidos, empiezo con <strong>tcpconnect<\/strong>, para medir el establecimiento de conexiones entre servicios. A continuaci\u00f3n, compruebo con tcpaccept qu\u00e9 sockets del servidor tienen un n\u00famero especialmente elevado de entradas y si se aplican los l\u00edmites por parte del listener. tcpretrans detecta los reenv\u00edos y distingue los problemas de transporte de los errores de aplicaci\u00f3n antes de ajustar los tiempos de espera y los reintentos. Con estas tres se\u00f1ales, puedo ver si la red, la aplicaci\u00f3n o un servicio de nivel superior es el responsable de la <strong>Latencia<\/strong> . A continuaci\u00f3n, ajusto las estrategias de backoff, los valores de keepalive, la configuraci\u00f3n del equilibrador de carga y los tama\u00f1os de los b\u00faferes.<\/p>\n\n<h2>Seguridad operativa y fiabilidad de eBPF<\/h2>\n<p>Solo subo <strong>fiable<\/strong> Pruebo primero mis propios programas eBPF en el entorno de staging. El verificador del n\u00facleo bloquea los programas defectuosos, pero adem\u00e1s establezco l\u00edmites para los mapas y los b\u00faferes, con el fin de que el uso de la memoria se mantenga dentro de unos l\u00edmites adecuados. Conservo los registros para supervisar el comportamiento y los efectos secundarios, y poder intervenir r\u00e1pidamente si es necesario. Las pol\u00edticas establecen qui\u00e9n puede cargar eBPF, de modo que el control permanezca en manos del equipo de la plataforma y se cumplan los requisitos de seguridad. Estas reglas garantizan que el rastreo en entornos de producci\u00f3n <strong>Fiable<\/strong> se mantiene y no da lugar a sorpresas.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/entwickler_schreibtisch_tools_4829.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Entornos de contenedores y Kubernetes<\/h2>\n<p>En los contenedores, separo los problemas sistem\u00e1ticos de los efectos espec\u00edficos de cada pod. Para ello, filtro las mediciones por cgroup, espacio de nombres o rango de PID. Muchas herramientas de bcc permiten filtrar por nombre o ID de proceso; como alternativa, realizo las mediciones en el host y asigno los eventos a las cargas de trabajo mediante cgroup. Importante:<\/p>\n<ul>\n  <li>Espacio de nombres de PID: los PID son diferentes entre el host y el contenedor. Asigno los ID o los filtro por nombre de proceso o puerto.<\/li>\n  <li>Cuotas de recursos: la limitaci\u00f3n de la CPU mediante las cuotas del CFS se manifiesta en largos tiempos de espera sin que el sistema est\u00e9 a plena capacidad. Lo detecto a trav\u00e9s de <strong>runqlat<\/strong> en combinaci\u00f3n con m\u00e9tricas de cuotas.<\/li>\n  <li>Espacios de nombres de red: Para los an\u00e1lisis de sockets, me aseguro de utilizar el espacio de nombres correcto. Realizo las mediciones en la interfaz del host y las correlaciono con las direcciones IP y los puertos de los pods.<\/li>\n<\/ul>\n<p>De este modo, los resultados de las mediciones siguen siendo fiables, incluso cuando hay muchas cargas de trabajo ejecut\u00e1ndose muy pr\u00f3ximas entre s\u00ed.<\/p>\n\n<h2>Integraci\u00f3n en pilas de observabilidad<\/h2>\n<p>No voy a sustituir mi sistema de seguimiento, sino que lo voy a complementar con <strong>eBPF<\/strong>. Las herramientas de bcc me proporcionan la profundidad, mientras que los sistemas de m\u00e9tricas, los registros y el APM muestran la amplitud; juntos ofrecen una visi\u00f3n coherente. Cuando es necesario, redirijo los rastros de bcc a los flujos de registros, activo instant\u00e1neas ante incidentes y documento los resultados con el equipo. Para perfiles puntuales, utilizo el muestreo adem\u00e1s de las l\u00edneas temporales de las m\u00e9tricas, con el fin de detectar anomal\u00edas <strong>tangible<\/strong> . Quien prefiera utilizar scripts como complemento, encontrar\u00e1 en <a href=\"https:\/\/webhosting.de\/es\/bpftrace-detectar-mas-rapidamente-los-problemas-del-servidor-de-alojamiento-y-realizar-un-diagnostico\/\">bpftrace en el alojamiento web<\/a> Una forma sencilla de responder a preguntas puntuales con miniescritos.<\/p>\n\n<h2>Obst\u00e1culos habituales y c\u00f3mo los supero<\/h2>\n<ul>\n  <li>\u00abNoisy Neighbor\u00bb: algunos trabajos generan una carga de corta duraci\u00f3n, pero muy intensa. <strong>execsnoop<\/strong> y <strong>perfiles<\/strong> Estos patrones los detecto de forma fiable; los organizo en intervalos de tiempo o los a\u00edslo mediante cuotas.<\/li>\n  <li>NUMA y afinidades: las altas latencias, a pesar de que hay n\u00facleos libres, indican accesos entre zonas NUMA. Compruebo las afinidades de la CPU, la asignaci\u00f3n de memoria y la distribuci\u00f3n de las IRQ.<\/li>\n  <li>Puntos cr\u00edticos de IRQ\/SoftIRQ: la carga de red puede saturar los n\u00facleos ksoftirqd. Superviso las retransmisiones, distribuyo las IRQ a trav\u00e9s de RSS\/colas y ajusto los valores de RPS\/XPS.<\/li>\n  <li>Efectos de la cach\u00e9 de p\u00e1gina: los arranques en fr\u00edo son m\u00e1s lentos. Tengo en cuenta las fases de calentamiento y comparo <strong>cachestat<\/strong>-Valores antes y despu\u00e9s de la carga.<\/li>\n  <li>Actualizaciones del n\u00facleo: los Kprobes pueden cambiar al pasar de una versi\u00f3n a otra. Yo prefiero los puntos de seguimiento estables, los pruebo de antemano y tengo preparado un conjunto m\u00ednimo.<\/li>\n<\/ul>\n\n<h2>Procedimientos que han demostrado su eficacia<\/h2>\n<ul>\n  <li>Instant\u00e1nea del incidente: ejecuci\u00f3n combinada de 60 a 120 segundos (execsnoop, runqlat, biolatency, tcpretrans, profile). A continuaci\u00f3n, me centro en el subsistema que llama la atenci\u00f3n.<\/li>\n  <li>Rutina de referencia: mediciones breves semanales en las rutas principales (por ejemplo, perfil de almacenamiento y de red). De este modo, detecto las desviaciones a tiempo.<\/li>\n  <li>Validaci\u00f3n de cambios: antes y despu\u00e9s de los cambios de configuraci\u00f3n, comparo los mismos puntos de medici\u00f3n para poder cuantificar el efecto.<\/li>\n<\/ul>\n\n<h2>Ingenier\u00eda continua del rendimiento de Linux<\/h2>\n<p>Para m\u00ed, la performance es un proceso continuo, no un <strong>Acci\u00f3n puntual<\/strong>. En CI\/CD integro comprobaciones breves basadas en eBPF para detectar las regresiones de forma temprana y detenerlas antes del lanzamiento. Durante las ventanas de mantenimiento, mido las rutas t\u00edpicas bajo carga, establezco valores de referencia y documento los rangos de latencia aceptables. De este modo, detecto r\u00e1pidamente las desviaciones y evito tener que dar palos de ciego durante la gesti\u00f3n de incidencias, ya que dispongo de datos comparativos <strong>disponible<\/strong>. Esta rutina contribuye directamente a la disponibilidad, al control de costes y a la experiencia del usuario.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/bcc-tools-leitfaden-4956.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Mini-caso pr\u00e1ctico: del s\u00edntoma a la causa en 12 minutos<\/h2>\n<p>Un cl\u00faster de API indica un aumento de las latencias de 99p, mientras que el RPS se mantiene sin cambios. Inicio una instant\u00e1nea de incidencia: <strong>tcpconnect<\/strong> no muestra anomal\u00edas en el establecimiento de la conexi\u00f3n, <strong>tcpretrans<\/strong> sigue siendo baja, pero la red no lo es, al parecer. <strong>runqlat<\/strong> indica tiempos de espera breves, pero frecuentes; <strong>perfiles<\/strong> muestra los puntos de acceso en un formato JSON. Al mismo tiempo, observo con <strong>cachestat<\/strong> una ca\u00edda de las tasas de aciertos de la cach\u00e9 durante los picos. La correlaci\u00f3n sugiere que se trata de muchas cargas \u00fatiles peque\u00f1as que se serializan de forma sincronizada y se escriben de inmediato.<\/p>\n<p>Lo verifico con <strong>ext4 m\u00e1s lento<\/strong>, que muestra fsyncs de varios milisegundos de duraci\u00f3n en el mismo volumen para el proceso de la API; <strong>biolatencia<\/strong> Confirma picos espor\u00e1dicos en la cola del dispositivo afectado. Medida correctiva: agrupar las operaciones de escritura, aumentar el tama\u00f1o del b\u00fafer y realizar el vaciado as\u00edncrono en puntos menos sensibles. Tras la implementaci\u00f3n, las latencias al 99.\u00ba percentil se reducen en un 35 %, la tasa de aciertos de la cach\u00e9 se recupera y <strong>runqlat<\/strong> vuelve a mostrar distribuciones estrechas.<\/p>\n\n<h2>Resumen para la pr\u00e1ctica<\/h2>\n<p>Con <strong>cco<\/strong> Gracias a las herramientas y a eBPF, consigo una visi\u00f3n clara del rendimiento de la CPU, las E\/S y la red en poco tiempo, sin necesidad de modificar las aplicaciones. La lista de herramientas, compuesta por execsnoop, opensnoop, ext4slower, biolatency, biosnoop, cachestat, tcpconnect, tcpaccept, tcpretrans y runqlat, constituye un punto de partida coherente. Adem\u00e1s, utilizo \u00abprofile\u00bb para identificar los puntos cr\u00edticos y optimizar las rutas de c\u00f3digo. Gracias a unas pol\u00edticas, un registro y unos l\u00edmites bien definidos, el uso en el n\u00facleo <strong>seguro<\/strong> y f\u00e1cil de entender. Quien aplique este m\u00e9todo de forma sistem\u00e1tica resolver\u00e1 los problemas de rendimiento m\u00e1s r\u00e1pidamente, planificar\u00e1 mejor las capacidades y reducir\u00e1 los costes por solicitud.<\/p>","protected":false},"excerpt":{"rendered":"<p>Descubre c\u00f3mo analizar y optimizar de forma profesional el rendimiento de Linux con bcc tools y eBPF. Esta gu\u00eda ofrece consejos pr\u00e1cticos sobre ingenier\u00eda del rendimiento, centr\u00e1ndose en la palabra clave \u00abbcc tools\u00bb.<\/p>","protected":false},"author":1,"featured_media":20675,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[922],"tags":[],"class_list":["post-20682","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technologie"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"128","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"bcc tools","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"20675","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/posts\/20682","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/comments?post=20682"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/posts\/20682\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/media\/20675"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/media?parent=20682"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/categories?post=20682"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/tags?post=20682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}