{"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-verktyg-linux-prestanda-ebpf-oevervakbarhet-fokus","status":"publish","type":"post","link":"https:\/\/webhosting.de\/sv\/bcc-tools-linux-performance-ebpf-observability-focus\/","title":{"rendered":"bcc tools i praktiken: Praktisk handbok f\u00f6r prestandautveckling i Linux med eBPF"},"content":{"rendered":"<p>Jag visar steg f\u00f6r steg hur jag <strong>bcc-verktyg<\/strong> anv\u00e4nder eBPF f\u00f6r att snabbt identifiera och \u00e5tg\u00e4rda flaskhalsar p\u00e5 Linux-servrar. Jag anv\u00e4nder praktiska arbetsfl\u00f6den, m\u00e4ter faktiska f\u00f6rdr\u00f6jningar i k\u00e4rnan och kopplar samman h\u00e4ndelser fr\u00e5n CPU, I\/O och n\u00e4tverk till en <strong>klar<\/strong> Orsaksanalys.<\/p>\n\n<h2>Centrala punkter<\/h2>\n<ul>\n  <li><strong>eBPF<\/strong> ger djup sp\u00e5rning med l\u00e5g overhead.<\/li>\n  <li><strong>bcc-verktyg<\/strong> omfattar CPU, I\/O, n\u00e4tverk och processer.<\/li>\n  <li><strong>N\u00e4ra produktionen<\/strong> Kan anv\u00e4ndas utan \u00e4ndringar i appen.<\/li>\n  <li><strong>Checklista<\/strong> med tio verktyg att b\u00f6rja med.<\/li>\n  <li><strong>S\u00e4kerhet<\/strong> genom Verifier och tydliga riktlinjer.<\/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>Varf\u00f6r eBPF f\u00f6r prestandautveckling i Linux<\/h2>\n<p>Jag str\u00e4cker mig efter <strong>eBPF<\/strong>, eftersom jag vill m\u00e4ta k\u00e4rnh\u00e4ndelser p\u00e5 ett s\u00e4kert och selektivt s\u00e4tt och med mycket liten overhead. Traditionella verktyg visar sammanlagda v\u00e4rden, men de f\u00f6rklarar s\u00e4llan varf\u00f6r tr\u00e5dar v\u00e4ntar, paket skickas om eller I\/O fastnar; eBPF fyller denna lucka med <strong>konkreta<\/strong> H\u00e4ndelser. Programmen k\u00f6rs i k\u00e4rnan, verifieraren kontrollerar dem i f\u00f6rv\u00e4g och jag kan starta utan omstart. P\u00e5 s\u00e5 s\u00e4tt kan jag koppla samman anrop fr\u00e5n anv\u00e4ndarutrymmet med k\u00e4rnans s\u00f6kv\u00e4gar och f\u00e5 en \u00f6verblick som m\u00f6jligg\u00f6r omedelbara optimeringar. Den som vill f\u00f6rdjupa sig i \u00e4mnet hittar en \u00f6versikt i min korta introduktion till <a href=\"https:\/\/webhosting.de\/sv\/ebpf-prestandaanalys-linux-sparning-serveroevervakning-observabilitet\/\">eBPF-prestandaanalys<\/a>, som beskriver samspelet mellan sp\u00e5rning och observabilitet.<\/p>\n\n<h2>Vad \u00e4r BCC-verktyg och var hittar jag dem?<\/h2>\n<p>Die <strong>bcc<\/strong> tools \u00e4r f\u00e4rdiga diagnostikprogram baserade p\u00e5 eBPF och finns vanligtvis i \/usr\/share\/bcc\/tools. Jag startar dem direkt i shellen, f\u00e5r tydliga standardutdata och beh\u00f6ver inte \u00e4ndra mina applikationer. Samlingen t\u00e4cker processer, systemanrop, filsystem, block-I\/O, n\u00e4tverk, schemal\u00e4ggare och profilering och \u00e4r d\u00e4rmed l\u00e4mplig f\u00f6r <strong>produktiv<\/strong> Analyser. Eftersom jag aktiverar sp\u00e5rning p\u00e5 ett m\u00e5linriktat s\u00e4tt blir p\u00e5verkan liten och m\u00e4tfelen till f\u00f6ljd av \u00f6vervakningen blir obetydliga. F\u00f6r mer komplexa fall kompletterar jag verktygen med egen eBPF eller anv\u00e4nder dessutom samplingsprofiler.<\/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 och krav<\/h2>\n<p>Jag installerar den <strong>bcc<\/strong> Verktyg via pakethanteraren (bcc-tools respektive bpfcc-tools) p\u00e5 vanliga distributioner. Det kr\u00e4vs en k\u00e4rna med eBPF-st\u00f6d (fr\u00e5n 4.x, helst 4.9+), aktiverade BPF-funktioner och tillr\u00e4ckliga beh\u00f6righeter f\u00f6r att ladda programmen. P\u00e5 produktionsservrar testar jag f\u00f6rst k\u00e4rnans och distributionens eBPF-funktioner i en testmilj\u00f6, s\u00e5 att senare m\u00e4tningar <strong>p\u00e5litlig<\/strong> k\u00f6ras. Jag f\u00f6rhindrar s\u00e4kerhetsprofiler som helt blockerar eBPF genom anpassade policyer. De kortfattade anvisningarna ger en praktisk \u00f6versikt \u00f6ver installation och anv\u00e4ndning av <a href=\"https:\/\/webhosting.de\/sv\/ebpf-linux-analysverktyg-serveroevervakning-insikter\/\">eBPF-analysverktyg<\/a>.<\/p>\n\n<h2>Innan start: System- och s\u00e4kerhetskontroller<\/h2>\n<p>Innan jag utf\u00f6r m\u00e4tningar i produktionen kontrollerar jag v\u00e4rdens grundl\u00e4ggande funktioner. P\u00e5 s\u00e5 s\u00e4tt undviker jag felaktiga startf\u00f6rs\u00f6k och f\u00e5r reproducerbara resultat.<\/p>\n<ul>\n  <li>Kontrollera k\u00e4rnfunktioner: <code>uname -r<\/code> och tillg\u00e4ngliga BPF-funktioner (t.ex. via Feature-Check). Viktiga \u00e4r kprobes\/tracepoints, BTF (f\u00f6r stabil typinformation) och perf-h\u00e4ndelser.<\/li>\n  <li>R\u00e4ttigheter och policyer: Jag ser till att endast beh\u00f6riga anv\u00e4ndare f\u00e5r ladda eBPF (CAP_BPF\/CAP_SYS_ADMIN eller motsvarande policy) och att LSM-profiler inte blockerar inl\u00e4sningen.<\/li>\n  <li>Systemparametrar: <code>kernel.unprivileged_bpf_disabled<\/code> \u00e4r oftast aktiv i produktiva milj\u00f6er. D\u00e4rf\u00f6r arbetar jag medvetet fr\u00e5n s\u00e4kra sessioner och med tydlig granskning.<\/li>\n  <li>Transparenta s\u00f6kv\u00e4gar: Jag anv\u00e4nder kataloger som <code>\/sys\/kernel\/debug\/tracing<\/code> och <code>\/sys\/fs\/bpf<\/code> i sikte f\u00f6r att rensa bort artefakter efter m\u00e4tningarna.<\/li>\n<\/ul>\n<p>Denna hygien s\u00e4kerst\u00e4ller att jag kan utf\u00f6ra m\u00e4tningarna p\u00e5 ett m\u00e5linriktat och reproducerbart s\u00e4tt \u2013 utan biverkningar.<\/p>\n\n<h2>Praktisk handbok: De tio f\u00f6rsta verktygen<\/h2>\n<p>F\u00f6r en snabb prestandakontroll f\u00f6ljer jag en fast ordning. P\u00e5 s\u00e5 s\u00e4tt kan jag tydligt avgr\u00e4nsa orsaker som beror p\u00e5 CPU, I\/O eller n\u00e4tverk och avg\u00f6ra om jag beh\u00f6ver granska stackar eller tidsm\u00e4tningar mer ing\u00e5ende. Tabellen visar verktygens huvudsakliga funktion och den fr\u00e5ga jag vill reda ut med dem. Jag h\u00e5ller f\u00f6rst m\u00e4tningstiden kort och upprepar m\u00e4tningarna s\u00e5 snart jag har en misstanke <strong>bekr\u00e4fta<\/strong> vill. P\u00e5 s\u00e5 s\u00e4tt undviker jag blinda fl\u00e4ckar och sl\u00f6sar inte bort tid p\u00e5 akuta <strong>Incidenter<\/strong>.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Verktyg<\/th>\n      <th>Observerat<\/th>\n      <th>Typisk fr\u00e5ga<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>execsnoop<\/td>\n      <td>Nya processer<\/td>\n      <td>Vem skapar kortvariga jobb som medf\u00f6r en belastning?<\/td>\n    <\/tr>\n    <tr>\n      <td>opensnoop<\/td>\n      <td>Fil\u00f6ppningar<\/td>\n      <td>Vilka v\u00e4gar \u00f6ppnas eller loggas kontinuerligt?<\/td>\n    <\/tr>\n    <tr>\n      <td>ext4 \u00e4r l\u00e5ngsammare (xfs*, btrfs*, zfs*)<\/td>\n      <td>L\u00e5ngsamma FS-operationer<\/td>\n      <td>Vilka visningar uppvisar h\u00f6ga latenser per volym?<\/td>\n    <\/tr>\n    <tr>\n      <td>biolatency<\/td>\n      <td>Block-I\/O-f\u00f6rdelning<\/td>\n      <td>F\u00f6rekommer det sporadiska eller ih\u00e5llande toppar i latensen?<\/td>\n    <\/tr>\n    <tr>\n      <td>biosnoop<\/td>\n      <td>Enskilda I\/O-f\u00f6rfr\u00e5gningar<\/td>\n      <td>Vilken process s\u00e4tter vissa enheter ur spel?<\/td>\n    <\/tr>\n    <tr>\n      <td>cachestat<\/td>\n      <td>Sidcachens beteende<\/td>\n      <td>L\u00f6nar det sig med mer RAM, eller uppst\u00e5r det problem med appen?<\/td>\n    <\/tr>\n    <tr>\n      <td>tcpconnect<\/td>\n      <td>Nya TCP-anslutningar<\/td>\n      <td>Vem anv\u00e4nder vilken tj\u00e4nst och hur ofta?<\/td>\n    <\/tr>\n    <tr>\n      <td>tcpaccept<\/td>\n      <td>Godk\u00e4nda anslutningar<\/td>\n      <td>Vilka serversocklar uts\u00e4tts f\u00f6r h\u00f6g belastning?<\/td>\n    <\/tr>\n    <tr>\n      <td>tcpretrans<\/td>\n      <td>\u00c5teruts\u00e4ndningar<\/td>\n      <td>Tyder paketf\u00f6rlust p\u00e5 instabila s\u00f6kv\u00e4gar?<\/td>\n    <\/tr>\n    <tr>\n      <td>runqlat<\/td>\n      <td>F\u00f6rdr\u00f6jningar i schemal\u00e4ggaren<\/td>\n      <td>V\u00e4ntar tr\u00e5darna f\u00f6r l\u00e4nge p\u00e5 CPU-tid?<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n<p>Jag anv\u00e4nder ocks\u00e5 <strong>profiler<\/strong> f\u00f6r att identifiera flaskhalsar i anv\u00e4ndar- eller k\u00e4rnutrymmet och sammanst\u00e4lla anropstackar. P\u00e5 s\u00e5 s\u00e4tt uppt\u00e4cker jag resurskr\u00e4vande regulj\u00e4ra uttryck, ineffektiva drivrutiner eller spinlocks, som jag sedan \u00e5tg\u00e4rdar i koden eller konfigurationen. Jag anv\u00e4nder korta samplingsintervall och j\u00e4mf\u00f6r flera k\u00f6rningar f\u00f6r att uppt\u00e4cka avvikande v\u00e4rden <strong>synlig<\/strong> . Denna kombination av \u00f6verblick och djupg\u00e5ende analys sparar mig mycket tid. D\u00e4refter testar jag optimeringen p\u00e5 nytt under samma belastning.<\/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>Ut\u00f6kning: Visa Off-CPU, l\u00e5sningar och v\u00e4ntetider<\/h2>\n<p>Inte all h\u00f6g latens beror p\u00e5 CPU:n. Ofta v\u00e4ntar tr\u00e5dar \u201eoff-CPU\u201c p\u00e5 I\/O, l\u00e5s eller v\u00e4ckningar. H\u00e4r kan kompletterande bcc-verktyg och -profiler vara till hj\u00e4lp:<\/p>\n<ul>\n  <li>Off-CPU-analys: Jag m\u00e4ter hur l\u00e4nge tr\u00e5dar inte befinner sig p\u00e5 CPU:n och vilka stackar som leder dit. Detta skiljer ber\u00e4kningstid fr\u00e5n v\u00e4ntetid och visar vad som orsakar blockeringar.<\/li>\n  <li>L\u00e5skonflikter: Jag granskar specifikt kritiska l\u00e5s i k\u00e4rnan och anv\u00e4ndarutrymmet. L\u00e5nga v\u00e4ntetider eller h\u00f6ga konflikter tyder p\u00e5 serialiseringspunkter som jag bryter upp (t.ex. genom sharding, finare granularitet eller andra datastrukturer).<\/li>\n  <li>Wakeup-v\u00e4gar: F\u00f6rdr\u00f6jningarna mellan \u201ehar v\u00e4ckts\u201c och \u201ek\u00f6rs igen\u201c avsl\u00f6jar schemal\u00e4ggnings- och prioriteringsproblem eller alltf\u00f6r stora arbetspooler.<\/li>\n<\/ul>\n<p>Jag korrelerar dessa signaler med <strong>runqlat<\/strong> och <strong>biolatency<\/strong>, f\u00f6r att skilja mellan orsaker som har att g\u00f6ra med minne, I\/O och schemal\u00e4ggaren.<\/p>\n\n<h2>M\u00e4tningens tillf\u00f6rlitlighet: Filter, varaktighet, tr\u00f6skelv\u00e4rden<\/h2>\n<p>F\u00f6r att eBPF-m\u00e4tningarna ska f\u00f6rbli reproducerbara f\u00f6ljer jag tre grundregler:<\/p>\n<ul>\n  <li>Kort och koncist: Jag l\u00e5ter verktygen i b\u00f6rjan bara k\u00f6ras en kort stund (t.ex. 10\u201330 sekunder) och fokuserar p\u00e5 misst\u00e4nkta PID:er, containrar eller socklar.<\/li>\n  <li>St\u00e4lla in tr\u00f6skelv\u00e4rden: N\u00e4r jag anv\u00e4nder \u201e*slower\u201c-verktyg filtrerar jag bort sm\u00e5 f\u00f6rdr\u00f6jningar f\u00f6r att minska bruset och endast se problematiska anrop.<\/li>\n  <li>Begr\u00e4nsa h\u00e4ndelsefrekvensen: Jag anv\u00e4nder selektiva filter (t.ex. processnamn, TID:er, portar) f\u00f6r att h\u00e5lla h\u00e4ndelsefrekvensen l\u00e5g. P\u00e5 s\u00e5 s\u00e4tt blir \u00f6verheaden minimal och jag undviker att h\u00e4ndelser g\u00e5r f\u00f6rlorade.<\/li>\n<\/ul>\n<p>F\u00f6rst n\u00e4r jag ser ett m\u00f6nster f\u00f6rl\u00e4nger jag l\u00f6ptiden eller utvidgar omfattningen. P\u00e5 s\u00e5 s\u00e4tt f\u00e5r jag <strong>ren<\/strong> och tillf\u00f6rlitliga stickprov.<\/p>\n\n<h2>Praktiskt scenario 1: Of\u00f6rklarligt h\u00f6g CPU-belastning<\/h2>\n<p>Om CPU-indikatorn visar konstant h\u00f6ga v\u00e4rden b\u00f6rjar jag med <strong>execsnoop<\/strong>, f\u00f6r att uppt\u00e4cka kortlivade processer. D\u00e4refter m\u00e4ter jag med runqlat hur l\u00e4nge tr\u00e5dar v\u00e4ntar p\u00e5 CPU-tid och kontrollerar om k\u00f6rk\u00f6erna \u00e4r \u00f6verfyllda eller om prioriteringarna \u00e4r felaktigt inst\u00e4llda. Om v\u00e4ntetiderna blir p\u00e5fallande minskar jag antalet arbetare, \u00e4ndrar tr\u00e5dpooler eller j\u00e4mnar ut cron-jobb s\u00e5 att schemal\u00e4ggaren <strong>grabba<\/strong> kan. Med profile samlar jag in stackar och hittar de verkliga flaskhalsarna i bibliotek och i min egen kod. F\u00f6rst n\u00e4r jag sammanst\u00e4ller dessa uppgifter fattar jag beslut om gr\u00e4nsv\u00e4rden, sopuppsamling, affiniteter eller kompileringsflaggor.<\/p>\n\n<h2>Praktiskt scenario 2: I\/O-f\u00f6rdr\u00f6jningar och tr\u00f6ga applikationer<\/h2>\n<p>Om anv\u00e4ndare klagar p\u00e5 att programmet h\u00e4nger vid l\u00e5g CPU-belastning, kontrollerar jag med <strong>ext4 \u00e4r l\u00e5ngsammare<\/strong> L\u00e5ngsamma filsystemanrop per process. D\u00e4refter anv\u00e4nder jag biolatency f\u00f6r att granska f\u00f6rdelningen av block-I\/O-tider per enhet, i syfte att uppt\u00e4cka sporadiska toppar eller ih\u00e5llande flaskhalsar. biosnoop visar mig om en enskild tj\u00e4nst genererar en onormalt stor m\u00e4ngd sm\u00e5 skrivoperationer och d\u00e4rmed orsakar k\u00f6bildning som bromsar andra processer. Med cachestat ser jag om sidcachen tr\u00e4ffar eller om det blir missar <strong>dominera<\/strong> och om mer RAM skulle hj\u00e4lpa. I slut\u00e4ndan best\u00e4mmer jag om batch-skrivningar, st\u00f6rre buffertar eller en \u00f6verg\u00e5ng till snabbare lagringsutrymme l\u00f6nar sig.<\/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>Praktiskt scenario 3: N\u00e4tverksv\u00e4gar och mikrotj\u00e4nster<\/h2>\n<p>I distribuerade milj\u00f6er b\u00f6rjar jag med <strong>tcpconnect<\/strong>, f\u00f6r att m\u00e4ta uppkopplingen mellan tj\u00e4nsterna. Sedan kontrollerar jag med tcpaccept vilka serversocklar som har s\u00e4rskilt m\u00e5nga inkommande anslutningar och om gr\u00e4nserna p\u00e5 lyssnarsidan fungerar. tcpretrans uppt\u00e4cker \u00e5terupprepade s\u00e4ndningar och skiljer transportproblem fr\u00e5n applikationsfel innan jag justerar timeouts och omf\u00f6rs\u00f6k. Med dessa tre signaler kan jag se om det \u00e4r n\u00e4tverket, appen eller en uppstr\u00f6ms-tj\u00e4nst som <strong>F\u00f6rdr\u00f6jning<\/strong> driver. D\u00e4refter justerar jag backoff-strategier, keepalive-v\u00e4rden, inst\u00e4llningar f\u00f6r lastbalanserare och buffertstorlekar.<\/p>\n\n<h2>Drifts\u00e4kerhet och tillf\u00f6rlitlighet hos eBPF<\/h2>\n<p>Jag laddar bara <strong>p\u00e5litlig<\/strong> Jag testar f\u00f6rst verktyg och egna eBPF-program p\u00e5 staging. Kernel-Verifier blockerar felaktiga program, men jag s\u00e4tter dessutom gr\u00e4nser f\u00f6r maps och buffertar s\u00e5 att minnesanv\u00e4ndningen h\u00e5lls inom rimliga gr\u00e4nser. Jag sparar loggdata f\u00f6r att h\u00e5lla koll p\u00e5 beteenden och bieffekter och snabbt kunna ingripa vid behov. Policyer fastst\u00e4ller vem som f\u00e5r ladda eBPF, s\u00e5 att kontrollen f\u00f6rblir hos plattformsteamet och s\u00e4kerhetskraven uppfylls. Dessa regler s\u00e4kerst\u00e4ller att sp\u00e5rning i produktionsmilj\u00f6er <strong>P\u00e5litlig<\/strong> f\u00f6rblir of\u00f6r\u00e4ndrad och ger inga \u00f6verraskningar.<\/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>Container- och Kubernetes-milj\u00f6er<\/h2>\n<p>I containrar skiljer jag systematiska problem fr\u00e5n pod-specifika effekter. F\u00f6r detta filtrerar jag m\u00e4tningarna efter cgroup, namnomr\u00e5de eller PID-intervall. M\u00e5nga bcc-verktyg till\u00e5ter filtrering efter processnamn eller -ID; alternativt m\u00e4ter jag p\u00e5 v\u00e4rddatorn och tilldelar h\u00e4ndelser till arbetsbelastningarna via cgroup. Viktigt:<\/p>\n<ul>\n  <li>PID-namnrymd: PID:er skiljer sig \u00e5t mellan v\u00e4rd och container. Jag mappar ID:n eller filtrerar efter processnamn\/portar.<\/li>\n  <li>Resurskvoter: CPU-begr\u00e4nsning genom CFS-kvoter visar sig i form av l\u00e5nga v\u00e4ntetider utan full systemutnyttjande. Jag m\u00e4rker detta genom <strong>runqlat<\/strong> i kombination med kvotm\u00e5tt.<\/li>\n  <li>N\u00e4tverksnamnrymder: Vid socket-analyser ser jag till att anv\u00e4nda r\u00e4tt namnrymd. Jag m\u00e4ter vid v\u00e4rdgr\u00e4nssnittet och korrelerar med pod-IP-adresser och portar.<\/li>\n<\/ul>\n<p>P\u00e5 s\u00e5 s\u00e4tt f\u00f6rblir m\u00e4tresultaten tillf\u00f6rlitliga, \u00e4ven om m\u00e5nga arbetsbelastningar k\u00f6rs t\u00e4tt intill varandra.<\/p>\n\n<h2>Integration i observabilitetsstackar<\/h2>\n<p>Jag ers\u00e4tter inte min \u00f6vervakning, utan kompletterar den med <strong>eBPF<\/strong>. bcc-verktygen ger mig djupet, medan metriksystem, loggar och APM visar bredden; tillsammans ger de en sammanh\u00e4ngande bild. Vid behov leder jag sp\u00e5r fr\u00e5n bcc vidare till loggpipelines, utl\u00f6ser \u00f6gonblicksbilder vid incidenter och dokumenterar resultaten i teamet. F\u00f6r punktvisa profiler anv\u00e4nder jag sampling ut\u00f6ver tidslinjer fr\u00e5n metriker, s\u00e5 att avvikelser <strong>p\u00e5taglig<\/strong> kommer att bli. Den som dessutom f\u00f6redrar skriptspr\u00e5k hittar i <a href=\"https:\/\/webhosting.de\/sv\/bpftrace-snabbare-upptaeckt-och-diagnostik-av-serverproblem-vid-webbhotell\/\">bpftrace i webbhotellet<\/a> ett smidigt s\u00e4tt att besvara ad hoc-fr\u00e5gor med miniskript.<\/p>\n\n<h2>Vanliga hinder \u2013 och hur jag hanterar dem<\/h2>\n<ul>\n  <li>Noisy Neighbor: Enskilda jobb genererar kortvarig men intensiv belastning. <strong>execsnoop<\/strong> plus <strong>profiler<\/strong> Dessa m\u00f6nster avsl\u00f6jas p\u00e5 ett tillf\u00f6rlitligt s\u00e4tt; jag s\u00e4tter tidsgr\u00e4nser f\u00f6r dem eller isolerar dem med hj\u00e4lp av kvoter.<\/li>\n  <li>NUMA och affiniteter: H\u00f6ga latenser trots lediga k\u00e4rnor tyder p\u00e5 \u00e5tkomst \u00f6ver NUMA-gr\u00e4nserna. Jag kontrollerar CPU-affiniteter, minnesbindning och IRQ-f\u00f6rdelning.<\/li>\n  <li>IRQ\/SoftIRQ-hotspots: N\u00e4tverksbelastningen kan \u00f6verbelasta ksoftirqd-k\u00e4rnor. Jag \u00f6vervakar \u00e5teruts\u00e4ndningar, f\u00f6rdelar IRQ:er via RSS\/k\u00f6er och justerar RPS\/XPS.<\/li>\n  <li>Effekter av sidcache: Kallstarter g\u00e5r l\u00e5ngsammare. Jag tar h\u00e4nsyn till uppv\u00e4rmningsfaser och j\u00e4mf\u00f6r <strong>cachestat<\/strong>-V\u00e4rden f\u00f6re och efter belastning.<\/li>\n  <li>K\u00e4rnuppdateringar: Kprobes kan \u00e4ndras vid versionshopp. Jag f\u00f6redrar stabila sp\u00e5rpunkter, testar i f\u00f6rv\u00e4g och har en minimupps\u00e4ttning redo.<\/li>\n<\/ul>\n\n<h2>Arbetsfl\u00f6den som har visat sig fungera v\u00e4l<\/h2>\n<ul>\n  <li>\u00d6versikt \u00f6ver h\u00e4ndelsen: 60\u2013120 sekunders kombinerad k\u00f6rning (execsnoop, runqlat, biolatency, tcpretrans, profile). D\u00e4refter fokuserar jag p\u00e5 det subsystem som sticker ut.<\/li>\n  <li>Baslinjerutin: Korta m\u00e4tningar varje vecka p\u00e5 nyckelv\u00e4gar (t.ex. lagrings- och n\u00e4tverksprofil). P\u00e5 s\u00e5 s\u00e4tt uppt\u00e4cker jag avvikelser i ett tidigt skede.<\/li>\n  <li>Validering av f\u00f6r\u00e4ndringar: F\u00f6re och efter konfigurations\u00e4ndringar j\u00e4mf\u00f6r jag samma m\u00e4tpunkter f\u00f6r att kunna kvantifiera effekten.<\/li>\n<\/ul>\n\n<h2>Kontinuerlig prestandautveckling f\u00f6r Linux<\/h2>\n<p>Jag betraktar performance som en p\u00e5g\u00e5ende process, inte som <strong>Eng\u00e5ngs\u00e5tg\u00e4rd<\/strong>. I CI\/CD integrerar jag korta eBPF-baserade kontroller f\u00f6r att uppt\u00e4cka regressioner i ett tidigt skede och stoppa dem innan de rullas ut. Under underh\u00e5llsf\u00f6nstren m\u00e4ter jag typiska v\u00e4gar under belastning, skapar baslinjer och dokumenterar acceptabla latensintervall. P\u00e5 s\u00e5 s\u00e4tt uppt\u00e4cker jag avvikelser snabbt och slipper gissa vid incidenter, eftersom j\u00e4mf\u00f6relsedata <strong>tillg\u00e4nglig<\/strong>. Denna rutin bidrar direkt till tillg\u00e4nglighet, kostnadskontroll och anv\u00e4ndarupplevelse.<\/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-fallstudie: Fr\u00e5n symptom till orsak p\u00e5 12 minuter<\/h2>\n<p>Ett API-kluster rapporterar \u00f6kande 99p-f\u00f6rdr\u00f6jningar med of\u00f6r\u00e4ndrad RPS. Jag startar en incident-snapshot: <strong>tcpconnect<\/strong> visar inga avvikelser vid uppkopplingen, <strong>tcpretrans<\/strong> f\u00f6rblir l\u00e5g \u2013 n\u00e4tverket \u00e4r det i alla fall inte. <strong>runqlat<\/strong> rapporterar korta men frekventa v\u00e4ntetider; <strong>profiler<\/strong> visar hotspots i en JSON-serialisering. Samtidigt \u00f6vervakar jag med <strong>cachestat<\/strong> en nedg\u00e5ng i cache-tr\u00e4fffrekvensen under toppbelastningar. Korrelationen tyder p\u00e5: M\u00e5nga sm\u00e5 datapaket som serialiseras synkront och skrivs omedelbart.<\/p>\n<p>Jag verifierar med <strong>ext4 \u00e4r l\u00e5ngsammare<\/strong>, som visar fsync-operationer som varar flera millisekunder p\u00e5 samma volym f\u00f6r API-processen; <strong>biolatency<\/strong> bekr\u00e4ftar sporadiska k\u00f6toppar p\u00e5 den ber\u00f6rda enheten. \u00c5tg\u00e4rd: Batchbehandling av skrivningar, st\u00f6rre buffert och asynkron t\u00f6mning vid mindre k\u00e4nsliga punkter. Efter implementeringen minskar 99p-latenserna med 35 %, cache-tr\u00e4fffrekvensen \u00e5terh\u00e4mtar sig, och <strong>runqlat<\/strong> visar \u00e5terigen smala f\u00f6rdelningar.<\/p>\n\n<h2>Sammanfattning f\u00f6r praktiken<\/h2>\n<p>Med <strong>bcc<\/strong> Med hj\u00e4lp av verktyg och eBPF f\u00e5r jag snabbt en \u00f6verblick \u00f6ver CPU, I\/O och n\u00e4tverk utan att beh\u00f6va \u00e4ndra i applikationerna. Checklistan med execsnoop, opensnoop, ext4slower, biolatency, biosnoop, cachestat, tcpconnect, tcpaccept, tcpretrans och runqlat utg\u00f6r en bra utg\u00e5ngspunkt. Som komplement anv\u00e4nder jag profilering f\u00f6r att synligg\u00f6ra flaskhalsar och optimera kodfl\u00f6den. Tack vare tydliga policyer, loggning och begr\u00e4nsningar f\u00f6rblir anv\u00e4ndningen i k\u00e4rnan <strong>s\u00e4ker<\/strong> och \u00f6versk\u00e5dlig. Den som till\u00e4mpar denna metod konsekvent l\u00f6ser prestandaproblem snabbare, planerar kapaciteten b\u00e4ttre och s\u00e4nker kostnaderna per f\u00f6rfr\u00e5gan.<\/p>","protected":false},"excerpt":{"rendered":"<p>L\u00e4r dig hur du med hj\u00e4lp av bcc tools och eBPF kan analysera och optimera prestandan i Linux p\u00e5 ett professionellt s\u00e4tt. Denna guide visar praktisk prestandateknik med fokus p\u00e5 nyckelordet bcc tools.<\/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\/sv\/wp-json\/wp\/v2\/posts\/20682","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/comments?post=20682"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts\/20682\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media\/20675"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media?parent=20682"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/categories?post=20682"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/tags?post=20682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}