{"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-outils-linux-performances-ebfp-observabilite-focus","status":"publish","type":"post","link":"https:\/\/webhosting.de\/fr\/bcc-tools-linux-performance-ebpf-observability-focus\/","title":{"rendered":"Les outils bcc en action : guide pratique pour l'ing\u00e9nierie des performances sous Linux avec eBPF"},"content":{"rendered":"<p>Je vais vous expliquer \u00e9tape par \u00e9tape comment je <strong>outils bcc<\/strong> J'utilise eBPF pour identifier et r\u00e9soudre rapidement les goulots d'\u00e9tranglement sur les serveurs Linux. Pour ce faire, j'utilise des workflows pratiques, je mesure les latences r\u00e9elles au niveau du noyau et je relie les \u00e9v\u00e9nements li\u00e9s au CPU, aux E\/S et au r\u00e9seau pour obtenir une <strong>clair<\/strong> Analyse des causes.<\/p>\n\n<h2>Points centraux<\/h2>\n<ul>\n  <li><strong>eBPF<\/strong> offre un tra\u00e7age approfondi avec une surcharge r\u00e9duite.<\/li>\n  <li><strong>outils bcc<\/strong> couvrent le processeur, les E\/S, le r\u00e9seau et les processus.<\/li>\n  <li><strong>Proche de la production<\/strong> utilisable sans modification de l'application.<\/li>\n  <li><strong>Liste de contr\u00f4le<\/strong> avec dix outils pour d\u00e9marrer.<\/li>\n  <li><strong>S\u00e9curit\u00e9<\/strong> gr\u00e2ce \u00e0 Verifier et \u00e0 des r\u00e8gles claires.<\/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>Pourquoi utiliser eBPF pour l'ing\u00e9nierie des performances sous Linux ?<\/h2>\n<p>Je me tourne vers <strong>eBPF<\/strong>, car je souhaite mesurer les \u00e9v\u00e9nements du noyau de mani\u00e8re fiable, s\u00e9lective et avec tr\u00e8s peu de surcharge. Les outils classiques affichent des totaux, mais ils expliquent rarement pourquoi les threads sont en attente, pourquoi des paquets sont renvoy\u00e9s ou pourquoi les E\/S sont bloqu\u00e9es ; eBPF comble cette lacune gr\u00e2ce \u00e0 <strong>concr\u00e8tes<\/strong> \u00c9v\u00e9nements. Les programmes s'ex\u00e9cutent dans le noyau, le v\u00e9rificateur les contr\u00f4le au pr\u00e9alable, et je peux les lancer sans red\u00e9marrer. Je peux ainsi \u00e9tablir une corr\u00e9lation entre les appels de l'espace utilisateur et les chemins d'acc\u00e8s du noyau, ce qui me donne une vue d'ensemble permettant des optimisations imm\u00e9diates. Si vous souhaitez approfondir le sujet, vous trouverez un aper\u00e7u dans ma br\u00e8ve introduction \u00e0 la <a href=\"https:\/\/webhosting.de\/fr\/ebpf-performances-analyse-linux-tracage-serveur-surveillance-observabilite\/\">Analyse des performances eBPF<\/a>, qui d\u00e9crit l'interaction entre le tra\u00e7age et l'observabilit\u00e9.<\/p>\n\n<h2>Que sont les outils BCC et o\u00f9 puis-je les trouver ?<\/h2>\n<p>Le <strong>bcc<\/strong> Les outils \u00ab tools \u00bb sont des programmes de diagnostic pr\u00eats \u00e0 l'emploi bas\u00e9s sur eBPF et se trouvent g\u00e9n\u00e9ralement dans le r\u00e9pertoire \/usr\/share\/bcc\/tools. Je les lance directement depuis le shell, j'obtiens des sorties standard claires et je n'ai pas besoin de modifier mes applications. Cette collection couvre les processus, les appels syst\u00e8me, les syst\u00e8mes de fichiers, les E\/S par blocs, le r\u00e9seau, les planificateurs et le profilage, et convient donc pour <strong>productif<\/strong> Analyses. Comme j'active le tra\u00e7age de mani\u00e8re cibl\u00e9e, son impact reste faible et les erreurs de mesure dues \u00e0 la surveillance sont minimes. Pour les cas plus complexes, je compl\u00e8te les outils avec mon propre eBPF ou j'utilise en plus des profils d'\u00e9chantillonnage.<\/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>Installation et conditions pr\u00e9alables<\/h2>\n<p>J'installe le <strong>bcc<\/strong> outils disponibles via le gestionnaire de paquets (bcc-tools ou bpfcc-tools) sur les distributions courantes. Il faut disposer d'un noyau prenant en charge eBPF (\u00e0 partir de la version 4.x, de pr\u00e9f\u00e9rence 4.9+), des fonctions BPF activ\u00e9es et des droits suffisants pour charger les programmes. Sur les serveurs de production, je v\u00e9rifie au pr\u00e9alable les capacit\u00e9s eBPF du noyau et de la distribution dans un environnement de test, afin que les mesures ult\u00e9rieures <strong>fiable<\/strong> fonctionnent. Je bloque les profils de s\u00e9curit\u00e9 qui d\u00e9sactivent compl\u00e8tement l'eBPF gr\u00e2ce \u00e0 des politiques adapt\u00e9es. Les notes succinctes sur ce sujet fournissent un aper\u00e7u pratique de la configuration et de l'utilisation de <a href=\"https:\/\/webhosting.de\/fr\/ebpf-linux-outils-danalyse-surveillance-des-serveurs-insights\/\">outils d'analyse eBPF<\/a>.<\/p>\n\n<h2>Avant le d\u00e9part : v\u00e9rifications du syst\u00e8me et de la s\u00e9curit\u00e9<\/h2>\n<p>Avant d'effectuer des mesures en production, je v\u00e9rifie les capacit\u00e9s de base de l'h\u00f4te. Cela me permet d'\u00e9viter les faux d\u00e9parts et d'obtenir des r\u00e9sultats reproductibles.<\/p>\n<ul>\n  <li>V\u00e9rifier les fonctionnalit\u00e9s du noyau : <code>uname -r<\/code> et les fonctions BPF disponibles (par exemple via Feature-Check). Les \u00e9l\u00e9ments importants sont les kprobes\/tracepoints, le BTF (pour des informations de type stables) et les \u00e9v\u00e9nements perf.<\/li>\n  <li>Droits et politiques : je m'assure que seuls les utilisateurs autoris\u00e9s peuvent charger eBPF (CAP_BPF\/CAP_SYS_ADMIN ou politique \u00e9quivalente) et que les profils LSM ne bloquent pas ce chargement.<\/li>\n  <li>Param\u00e8tres syst\u00e8me : <code>kernel.unprivileged_bpf_disabled<\/code> est g\u00e9n\u00e9ralement actif dans les environnements de production. C'est pourquoi je travaille d\u00e9lib\u00e9r\u00e9ment \u00e0 partir de sessions s\u00e9curis\u00e9es et avec un suivi rigoureux.<\/li>\n  <li>Chemins d'acc\u00e8s transparents : je conserve les r\u00e9pertoires tels que <code>\/sys\/kernel\/debug\/tracing<\/code> et <code>\/sys\/fs\/bpf<\/code> \u00e0 l'\u0153il, afin d'\u00e9liminer les artefacts apr\u00e8s les mesures.<\/li>\n<\/ul>\n<p>Cette rigueur me permet d'effectuer des mesures de mani\u00e8re cibl\u00e9e et reproductible, sans effets secondaires.<\/p>\n\n<h2>Guide pratique : les dix premiers outils<\/h2>\n<p>Pour effectuer un contr\u00f4le rapide des performances, je suis une proc\u00e9dure bien d\u00e9finie. Cela me permet d\u2019identifier clairement les causes li\u00e9es au processeur, aux E\/S ou au r\u00e9seau, et de d\u00e9cider s\u2019il faut examiner plus en d\u00e9tail les piles d\u2019appels ou les temps de r\u00e9ponse. Le tableau pr\u00e9sente la fonction principale de chaque outil et la question \u00e0 laquelle il permet de r\u00e9pondre. Je limite d\u2019abord la dur\u00e9e d\u2019ex\u00e9cution et je r\u00e9p\u00e8te les mesures d\u00e8s que j\u2019ai un soup\u00e7on <strong>confirment<\/strong> Je veux. C'est ainsi que j'\u00e9vite les angles morts et que je ne perds pas de temps en cas d'urgence <strong>Incidents<\/strong>.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Outil<\/th>\n      <th>Observ\u00e9<\/th>\n      <th>Question typique<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>execsnoop<\/td>\n      <td>Nouveaux processus<\/td>\n      <td>Qui cr\u00e9e des emplois \u00e9ph\u00e9m\u00e8res qui g\u00e9n\u00e8rent une charge de travail ?<\/td>\n    <\/tr>\n    <tr>\n      <td>opensnoop<\/td>\n      <td>Ouverture de fichiers<\/td>\n      <td>Quels chemins d'acc\u00e8s sont constamment ouverts ou enregistr\u00e9s ?<\/td>\n    <\/tr>\n    <tr>\n      <td>ext4 plus lent (xfs*, btrfs*, zfs*)<\/td>\n      <td>Op\u00e9rations FS lentes<\/td>\n      <td>Quelles requ\u00eates pr\u00e9sentent des latences \u00e9lev\u00e9es par volume ?<\/td>\n    <\/tr>\n    <tr>\n      <td>biolatency<\/td>\n      <td>R\u00e9partition des E\/S par blocs<\/td>\n      <td>Y a-t-il des pics de latence sporadiques ou persistants ?<\/td>\n    <\/tr>\n    <tr>\n      <td>biosnoop<\/td>\n      <td>Demandes d'E\/S individuelles<\/td>\n      <td>Quel processus met certains appareils \u00e0 genoux ?<\/td>\n    <\/tr>\n    <tr>\n      <td>cachestat<\/td>\n      <td>Comportement du cache de page<\/td>\n      <td>Est-il int\u00e9ressant d'augmenter la m\u00e9moire vive ou l'application pr\u00e9sente-t-elle des dysfonctionnements ?<\/td>\n    <\/tr>\n    <tr>\n      <td>tcpconnect<\/td>\n      <td>Nouvelles connexions TCP<\/td>\n      <td>Qui utilise quel service et \u00e0 quelle fr\u00e9quence ?<\/td>\n    <\/tr>\n    <tr>\n      <td>tcpaccept<\/td>\n      <td>Liens accept\u00e9s<\/td>\n      <td>Quels sockets serveur sont soumis \u00e0 une charge importante ?<\/td>\n    <\/tr>\n    <tr>\n      <td>tcpretrans<\/td>\n      <td>Rediffusions<\/td>\n      <td>La perte de paquets est-elle le signe de chemins instables ?<\/td>\n    <\/tr>\n    <tr>\n      <td>runqlat<\/td>\n      <td>Latences du planificateur<\/td>\n      <td>Les threads attendent-ils trop longtemps pour obtenir du temps CPU ?<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n<p>En outre, je mets en place <strong>profils<\/strong> pour d\u00e9tecter les points chauds dans l'espace utilisateur ou dans l'espace noyau, et pour agr\u00e9ger les piles d'appels. Cela me permet de rep\u00e9rer les expressions r\u00e9guli\u00e8res co\u00fbteuses, les pilotes inefficaces ou les spinlocks, que je corrige ensuite dans le code ou dans la configuration. J\u2019utilise des intervalles d\u2019\u00e9chantillonnage courts et je compare plusieurs ex\u00e9cutions afin d\u2019\u00e9liminer les valeurs aberrantes <strong>visible<\/strong> . Ce m\u00e9lange entre vue d'ensemble et analyse approfondie me fait gagner beaucoup de temps. Je teste ensuite \u00e0 nouveau l'optimisation sous la m\u00eame charge.<\/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>Extension : afficher les op\u00e9rations hors CPU, les verrous et les temps d'attente<\/h2>\n<p>Toutes les latences \u00e9lev\u00e9es ne sont pas li\u00e9es au processeur. Souvent, les threads \u201e hors processeur \u201c attendent des op\u00e9rations d'E\/S, des verrous ou des r\u00e9veils. C'est l\u00e0 que les outils et profils bcc compl\u00e9mentaires s'av\u00e8rent utiles :<\/p>\n<ul>\n  <li>Analyse hors CPU : je mesure la dur\u00e9e pendant laquelle les threads ne sont pas sur le CPU et les piles qui y m\u00e8nent. Cela permet de distinguer le temps de calcul du temps d'attente et de mettre en \u00e9vidence les \u00e9l\u00e9ments qui provoquent des blocages.<\/li>\n  <li>Conflits d'acc\u00e8s aux verrous : j'examine de mani\u00e8re cibl\u00e9e les verrous critiques du noyau et de l'espace utilisateur. Des temps d'attente prolong\u00e9s ou des conflits d'acc\u00e8s \u00e9lev\u00e9s indiquent la pr\u00e9sence de points de s\u00e9rialisation que je m'efforce de supprimer (par exemple, par le partitionnement, une granularit\u00e9 plus fine ou d'autres structures de donn\u00e9es).<\/li>\n  <li>Chemins de r\u00e9veil : les latences entre \u201e a \u00e9t\u00e9 r\u00e9veill\u00e9 \u201c et \u201e fonctionne \u00e0 nouveau \u201c r\u00e9v\u00e8lent des probl\u00e8mes d'ordonnancement et de priorit\u00e9, ou des pools de workers trop importants.<\/li>\n<\/ul>\n<p>Je mets ces signaux en corr\u00e9lation avec <strong>runqlat<\/strong> et <strong>biolatency<\/strong>, afin de distinguer les causes li\u00e9es \u00e0 la m\u00e9moire, aux E\/S et au planificateur.<\/p>\n\n<h2>Hygi\u00e8ne des mesures : filtres, dur\u00e9e, seuils<\/h2>\n<p>Pour que les mesures eBPF restent reproductibles, je m'en tiens \u00e0 trois r\u00e8gles de base :<\/p>\n<ul>\n  <li>En bref et de mani\u00e8re cibl\u00e9e : au d\u00e9but, je ne laisse les outils tourner que bri\u00e8vement (par exemple, 10 \u00e0 30 secondes) et je me concentre sur les PID, les conteneurs ou les sockets suspects.<\/li>\n  <li>D\u00e9finir des seuils : avec les outils \u201e *slower \u201c, je filtre les petites latences afin de r\u00e9duire le bruit et de ne voir que les appels probl\u00e9matiques.<\/li>\n  <li>Limiter le d\u00e9bit : j'utilise des filtres s\u00e9lectifs (par exemple, nom du processus, TID, ports) pour maintenir un faible d\u00e9bit d'\u00e9v\u00e9nements. Cela permet de r\u00e9duire au minimum la surcharge et d'\u00e9viter les \u00e9v\u00e9nements perdus.<\/li>\n<\/ul>\n<p>Ce n'est que lorsque je rep\u00e8re une tendance que je prolonge la dur\u00e9e ou que j'\u00e9largis le champ d'application. Cela me permet d'obtenir <strong>propre<\/strong> et des \u00e9chantillons fiables.<\/p>\n\n<h2>Sc\u00e9nario pratique n\u00b0 1 : charge CPU anormalement \u00e9lev\u00e9e<\/h2>\n<p>Si l'indicateur de charge du processeur affiche en permanence des valeurs \u00e9lev\u00e9es, je commence par <strong>execsnoop<\/strong>, afin d'identifier les processus de courte dur\u00e9e. Ensuite, j\u2019utilise runqlat pour mesurer le temps d\u2019attente des threads en temps CPU et je v\u00e9rifie si les files d\u2019attente sont surcharg\u00e9es ou si les priorit\u00e9s sont mal d\u00e9finies. Si les temps d\u2019attente deviennent trop importants, je r\u00e9duis le nombre de travailleurs, je modifie les pools de threads ou j\u2019\u00e9tale les t\u00e2ches Cron afin que le planificateur <strong>saisissent<\/strong> . Gr\u00e2ce \u00e0 profile, je collecte des piles d'appels et identifie les v\u00e9ritables points sensibles dans les biblioth\u00e8ques et dans mon propre code. Ce n'est qu'apr\u00e8s avoir crois\u00e9 ces informations que je prends des d\u00e9cisions concernant les limites, le ramasse-miettes, les affinit\u00e9s ou les options du compilateur.<\/p>\n\n<h2>Sc\u00e9nario pratique n\u00b0 2 : latences d'E\/S et applications lentes<\/h2>\n<p>Si des utilisateurs se plaignent de ralentissements alors que l'utilisation du processeur est faible, je v\u00e9rifie avec <strong>ext4 plus lent<\/strong> Appels lents au syst\u00e8me de fichiers par processus. Ensuite, j'utilise biolatency pour examiner la r\u00e9partition des temps d'E\/S par bloc pour chaque p\u00e9riph\u00e9rique, afin de d\u00e9tecter des pics sporadiques ou des goulots d'\u00e9tranglement persistants. biosnoop me permet de voir si un service particulier g\u00e9n\u00e8re un nombre anormalement \u00e9lev\u00e9 de petites \u00e9critures, provoquant ainsi une mise en file d\u2019attente qui ralentit les autres processus. Avec cachestat, je peux v\u00e9rifier si le cache de page est efficace ou s\u2019il y a des \u00e9checs (misses). <strong>dominer<\/strong> et qu'une m\u00e9moire vive plus importante serait utile. Au final, c'est moi qui d\u00e9ciderai si les \u00e9critures par lots, des tampons plus grands ou le passage \u00e0 un support de stockage plus rapide s'av\u00e8rent rentables.<\/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>Sc\u00e9nario pratique n\u00b0 3 : chemins r\u00e9seau et microservices<\/h2>\n<p>Dans les environnements distribu\u00e9s, je commence par <strong>tcpconnect<\/strong>, afin de mesurer l'\u00e9tablissement des connexions entre les services. Ensuite, j'utilise tcpaccept pour v\u00e9rifier quels sockets serveur re\u00e7oivent un nombre particuli\u00e8rement \u00e9lev\u00e9 de requ\u00eates entrantes et si les limites c\u00f4t\u00e9 \u00e9couteur sont respect\u00e9es. tcpretrans d\u00e9tecte les retransmissions et permet de distinguer les probl\u00e8mes de transport des erreurs d\u2019application avant que je n\u2019ajuste les d\u00e9lais d\u2019attente et les tentatives de reconnexion. Gr\u00e2ce \u00e0 ces trois indicateurs, je peux d\u00e9terminer si c\u2019est le r\u00e9seau, l\u2019application ou un service en amont qui est \u00e0 l\u2019origine de la <strong>Latence<\/strong> . Ensuite, j'ajuste les strat\u00e9gies de backoff, les valeurs de keepalive, les param\u00e8tres de l'\u00e9quilibreur de charge et la taille des tampons.<\/p>\n\n<h2>S\u00e9curit\u00e9 de fonctionnement et fiabilit\u00e9 de l'eBPF<\/h2>\n<p>Je t\u00e9l\u00e9charge uniquement <strong>digne de confiance<\/strong> Je teste d'abord mes propres programmes eBPF sur l'environnement de staging. Le v\u00e9rificateur du noyau bloque les programmes d\u00e9fectueux, mais je fixe en plus des limites pour les maps et les buffers afin que l'utilisation de la m\u00e9moire reste bien ma\u00eetris\u00e9e. Je conserve les journaux de connexion afin de surveiller le comportement et les effets secondaires, et d\u2019intervenir rapidement si n\u00e9cessaire. Des politiques d\u00e9finissent qui est autoris\u00e9 \u00e0 charger de l\u2019eBPF, afin que le contr\u00f4le reste entre les mains de l\u2019\u00e9quipe de la plateforme et que les exigences de s\u00e9curit\u00e9 soient respect\u00e9es. Ces r\u00e8gles garantissent que le tra\u00e7age dans les environnements de production <strong>fiable<\/strong> reste tel quel et ne r\u00e9serve aucune surprise.<\/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>Environnements conteneurs et Kubernetes<\/h2>\n<p>Dans les conteneurs, je distingue syst\u00e9matiquement les probl\u00e8mes g\u00e9n\u00e9raux des effets sp\u00e9cifiques aux pods. Pour cela, je filtre les mesures par cgroup, espace de noms ou plage de PID. De nombreux outils bcc permettent de filtrer par nom ou ID de processus ; sinon, j'effectue les mesures sur l'h\u00f4te et j'attribue les \u00e9v\u00e9nements aux charges de travail via les cgroups. Important :<\/p>\n<ul>\n  <li>Espace de noms PID : les PID diff\u00e8rent entre l'h\u00f4te et le conteneur. Je mappe les identifiants ou j'effectue un filtrage en fonction des noms de processus ou des ports.<\/li>\n  <li>Quotas de ressources : la limitation de la puissance du processeur due aux quotas CFS se traduit par de longs temps d'attente sans que le syst\u00e8me ne soit pleinement sollicit\u00e9. Je le constate via <strong>runqlat<\/strong> en combinaison avec des indicateurs de quotas.<\/li>\n  <li>Espaces de noms r\u00e9seau : pour les analyses de sockets, je veille \u00e0 utiliser le bon espace de noms. J'effectue mes mesures au niveau de l'interface h\u00f4te et j'\u00e9tablis une corr\u00e9lation avec les adresses IP et les ports des pods.<\/li>\n<\/ul>\n<p>Ainsi, les r\u00e9sultats des mesures restent fiables, m\u00eame lorsque de nombreuses charges de travail s'ex\u00e9cutent simultan\u00e9ment.<\/p>\n\n<h2>Int\u00e9gration dans les piles d'observabilit\u00e9<\/h2>\n<p>Je ne remplace pas mon syst\u00e8me de surveillance, je le compl\u00e8te avec <strong>eBPF<\/strong>. Les outils bcc m'apportent la profondeur, tandis que les syst\u00e8mes de m\u00e9triques, les journaux et l'APM montrent l'\u00e9tendue ; ensemble, ils donnent une image coh\u00e9rente. Si n\u00e9cessaire, je redirige les traces issues de bcc vers des pipelines de journaux, je d\u00e9clenche des instantan\u00e9s en cas d'incidents et je documente les r\u00e9sultats au sein de l'\u00e9quipe. Pour des profils ponctuels, j\u2019utilise l\u2019\u00e9chantillonnage en compl\u00e9ment des chronologies issues des m\u00e9triques, afin de d\u00e9tecter les anomalies <strong>tangible<\/strong> . Ceux qui pr\u00e9f\u00e8rent utiliser des scripts en compl\u00e9ment trouveront dans <a href=\"https:\/\/webhosting.de\/fr\/bpftrace-detecter-plus-rapidement-les-problemes-sur-les-serveurs-dhebergement-et-etablir-un-diagnostic\/\">bpftrace dans l'h\u00e9bergement<\/a> un moyen simple de r\u00e9pondre \u00e0 des questions ponctuelles \u00e0 l'aide de mini-scripts.<\/p>\n\n<h2>Les obstacles courants \u2013 et comment je les surmonte<\/h2>\n<ul>\n  <li>\u00ab Noisy Neighbor \u00bb : certaines t\u00e2ches g\u00e9n\u00e8rent une charge de courte dur\u00e9e mais intense. <strong>execsnoop<\/strong> plus <strong>profils<\/strong> Ces mod\u00e8les permettent de les d\u00e9tecter de mani\u00e8re fiable ; je les limite dans le temps ou je les isole \u00e0 l'aide de quotas.<\/li>\n  <li>NUMA et affinit\u00e9s : des latences \u00e9lev\u00e9es malgr\u00e9 des c\u0153urs disponibles indiquent des acc\u00e8s inter-NUMA. Je v\u00e9rifie les affinit\u00e9s des processeurs, l'affectation de la m\u00e9moire et la r\u00e9partition des IRQ.<\/li>\n  <li>Points sensibles IRQ\/SoftIRQ : la charge r\u00e9seau peut saturer les noyaux ksoftirqd. Je surveille les retransmissions, je r\u00e9partis les IRQ via RSS\/files d'attente et j'ajuste les RPS\/XPS.<\/li>\n  <li>Effets du cache de page : les d\u00e9marrages \u00e0 froid semblent plus lents. Je tiens compte des phases de pr\u00e9chauffage et je compare <strong>cachestat<\/strong>-Valeurs avant et apr\u00e8s la charge.<\/li>\n  <li>Mises \u00e0 jour du noyau : les Kprobes peuvent changer lors des changements de version. Je pr\u00e9f\u00e8re utiliser des tracepoints stables, je les teste au pr\u00e9alable et je garde un ensemble minimal \u00e0 disposition.<\/li>\n<\/ul>\n\n<h2>Des processus de travail qui ont fait leurs preuves<\/h2>\n<ul>\n  <li>Aper\u00e7u de l'incident : ex\u00e9cution combin\u00e9e de 60 \u00e0 120 secondes (execsnoop, runqlat, biolatency, tcpretrans, profile). Je me concentre ensuite sur le sous-syst\u00e8me qui pr\u00e9sente des anomalies.<\/li>\n  <li>Routine de r\u00e9f\u00e9rence : mesures rapides hebdomadaires sur les chemins cl\u00e9s (par exemple, profil de stockage et de r\u00e9seau). Cela me permet de d\u00e9tecter les \u00e9carts \u00e0 un stade pr\u00e9coce.<\/li>\n  <li>Validation des modifications : avant et apr\u00e8s les modifications de configuration, je compare les m\u00eames points de mesure afin de quantifier l'effet.<\/li>\n<\/ul>\n\n<h2>Optimisation continue des performances sous Linux<\/h2>\n<p>Je consid\u00e8re la performance comme un processus continu, et non comme <strong>Action unique<\/strong>. Dans le cadre du CI\/CD, j'int\u00e8gre de br\u00e8ves v\u00e9rifications bas\u00e9es sur eBPF afin de d\u00e9tecter rapidement les r\u00e9gressions et de les bloquer avant le d\u00e9ploiement. Pendant les fen\u00eatres de maintenance, je mesure les chemins typiques sous charge, j\u2019\u00e9tablis des r\u00e9f\u00e9rences et je documente les plages de latence acceptables. Cela me permet de d\u00e9tecter rapidement les \u00e9carts et d\u2019\u00e9viter les conjectures lors d\u2019un incident, car je dispose de donn\u00e9es de comparaison <strong>sont pr\u00e9sents<\/strong>. Cette proc\u00e9dure contribue directement \u00e0 la disponibilit\u00e9, \u00e0 la ma\u00eetrise des co\u00fbts et \u00e0 l'exp\u00e9rience utilisateur.<\/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-\u00e9tude de cas : du sympt\u00f4me \u00e0 la cause en 12 minutes<\/h2>\n<p>Un cluster API signale une augmentation des latences \u00e0 99e centile alors que le RPS reste inchang\u00e9. Je lance un instantan\u00e9 d'incident : <strong>tcpconnect<\/strong> ne pr\u00e9sente aucune anomalie lors de l'\u00e9tablissement de la connexion, <strong>tcpretrans<\/strong> reste faible \u2013 ce n'est sans doute pas le cas du r\u00e9seau. <strong>runqlat<\/strong> fait \u00e9tat de temps d'attente courts mais fr\u00e9quents ; <strong>profils<\/strong> affiche les points d'int\u00e9r\u00eat sous forme de s\u00e9rie JSON. En parall\u00e8le, j'observe avec <strong>cachestat<\/strong> une chute des taux de r\u00e9ussite du cache pendant les pics. La corr\u00e9lation sugg\u00e8re la pr\u00e9sence de nombreuses petites charges utiles, s\u00e9rialis\u00e9es de mani\u00e8re synchrone et \u00e9crites imm\u00e9diatement.<\/p>\n<p>Je v\u00e9rifie \u00e0 l'aide de <strong>ext4 plus lent<\/strong>, qui montre des fsyncs de plusieurs millisecondes sur le m\u00eame volume pour le processus API ; <strong>biolatency<\/strong> confirme l'existence de pics sporadiques dans la file d'attente sur le p\u00e9riph\u00e9rique concern\u00e9. Mesure corrective : regroupement des \u00e9critures, augmentation de la taille du tampon et vidage asynchrone \u00e0 des points moins sensibles. Apr\u00e8s le d\u00e9ploiement, les latences \u00e0 99e centile diminuent de 35 %, le taux de r\u00e9ussite du cache se r\u00e9tablit, et <strong>runqlat<\/strong> montre \u00e0 nouveau des distributions \u00e9troites.<\/p>\n\n<h2>R\u00e9sum\u00e9 pour la pratique<\/h2>\n<p>Avec <strong>bcc<\/strong> Gr\u00e2ce \u00e0 ces outils et \u00e0 eBPF, je peux rapidement obtenir des informations claires sur l'utilisation du processeur, des E\/S et du r\u00e9seau, sans modifier les applications. La liste comprenant execsnoop, opensnoop, ext4slower, biolatency, biosnoop, cachestat, tcpconnect, tcpaccept, tcpretrans et runqlat constitue un point de d\u00e9part coh\u00e9rent. En compl\u00e9ment, j\u2019utilise profile pour mettre en \u00e9vidence les points sensibles et optimiser les chemins d\u2019ex\u00e9cution. Gr\u00e2ce \u00e0 des politiques, une journalisation et des limites bien d\u00e9finies, l\u2019intervention au niveau du noyau reste <strong>en toute s\u00e9curit\u00e9<\/strong> et transparente. Ceux qui appliquent cette m\u00e9thode de mani\u00e8re coh\u00e9rente r\u00e9solvent plus rapidement les probl\u00e8mes de performance, planifient mieux leurs capacit\u00e9s et r\u00e9duisent les co\u00fbts par demande.<\/p>","protected":false},"excerpt":{"rendered":"<p>D\u00e9couvrez comment analyser et optimiser de mani\u00e8re professionnelle les performances sous Linux \u00e0 l'aide des outils bcc et d'eBPF. Ce guide pr\u00e9sente des techniques pratiques d'ing\u00e9nierie des performances, en mettant l'accent sur les outils bcc.<\/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":"123","_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\/fr\/wp-json\/wp\/v2\/posts\/20682","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/comments?post=20682"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts\/20682\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/media\/20675"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/media?parent=20682"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/categories?post=20682"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/tags?post=20682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}