{"id":20626,"date":"2026-08-14T08:35:54","date_gmt":"2026-08-14T06:35:54","guid":{"rendered":"https:\/\/webhosting.de\/perf-top-linux-hotspots-kernel-tools\/"},"modified":"2026-08-14T08:35:54","modified_gmt":"2026-08-14T06:35:54","slug":"perf-top-linux-hotspots-kaernverktyg","status":"publish","type":"post","link":"https:\/\/webhosting.de\/sv\/perf-top-linux-hotspots-kernel-tools\/","title":{"rendered":"perf top Linux: Identifiera CPU-hotspots i k\u00e4rnan"},"content":{"rendered":"<p>Med <strong>perf top<\/strong> Under Linux kan jag p\u00e5 n\u00e5gra sekunder se vilka k\u00e4rnfunktioner som f\u00f6r n\u00e4rvarande tar mest CPU-tid i anspr\u00e5k och var flaskhalsar uppst\u00e5r. I den h\u00e4r guiden visar jag, med hj\u00e4lp av tydliga steg, hur jag identifierar live-hotspots, tolkar utdata p\u00e5 ett s\u00e4kert s\u00e4tt och utifr\u00e5n detta drar slutsatser f\u00f6r snabba optimeringar av schemal\u00e4ggare, n\u00e4tverk och minne.<\/p>\n\n<h2>Centrala punkter<\/h2>\n\n<p>Jag anser att livevyn fr\u00e5n <strong>perf<\/strong> Perfekt som utg\u00e5ngspunkt, eftersom det omedelbart visar de st\u00f6rsta tidstjuvarna. Procentandelarna per symbol visar mig om flaskhalsen finns i <strong>K\u00e4rnan<\/strong> eller om det ligger i anv\u00e4ndarutrymmet. Utifr\u00e5n \u00e5terkommande m\u00f6nster avg\u00f6r jag om det \u00e4r l\u00e5s, IRQ:er, n\u00e4tverk eller minne som dominerar. D\u00e4refter avgr\u00e4nsar jag problemomr\u00e5det med mer avancerade verktyg och testar \u00e4ndringarna direkt under belastning. P\u00e5 s\u00e5 s\u00e4tt f\u00f6rb\u00e4ttrar jag steg f\u00f6r steg <strong>CPU<\/strong>-utnyttjandet och minska latensen p\u00e5 ett h\u00e5llbart s\u00e4tt.<\/p>\n<ul>\n  <li><strong>Live-hotspots<\/strong> identifiera och prioritera<\/li>\n  <li><strong>Procentandelar<\/strong> tolka korrekt f\u00f6r varje funktion<\/li>\n  <li><strong>Huvudfokus<\/strong> st\u00e4lla in: IRQ:er, l\u00e5s, minne<\/li>\n  <li><strong>Arbetsfl\u00f6de<\/strong>: topp \u2192 post \u2192 rapport<\/li>\n  <li><strong>Optimeringar<\/strong> verifiera p\u00e5 ett m\u00e5linriktat s\u00e4tt<\/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\/cpu-hotspots-linux-kernel-4872.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Vad \u00e4r Perf Top och vad anv\u00e4nder jag det till?<\/h2>\n\n<p>Jag anv\u00e4nder <strong>perf top<\/strong>, f\u00f6r att omedelbart kunna se vilka symboler som tar upp den st\u00f6rsta andelen av CPU-tiden medan programmet k\u00f6rs. Verktyget anv\u00e4nder h\u00e5rdvarans prestandam\u00e4tare och visar mig med korta intervall en uppdaterad ranglista \u00f6ver de mest resurskr\u00e4vande funktionerna. Enligt Linux-Magazin klarar perf b\u00e5de profilering och sp\u00e5rning, vilket g\u00f6r att <strong>Live-vy<\/strong> s\u00f6ml\u00f6st kopplar samman med djupare analyser. I det vanliga arbetsfl\u00f6det kompletterar jag \u00f6gonblicksbilden med perf record och perf report f\u00f6r att unders\u00f6ka callgraphs och exakta s\u00f6kv\u00e4gar. P\u00e5 s\u00e5 s\u00e4tt besvarar jag den centrala fr\u00e5gan: Var tillbringar <strong>CPU<\/strong> just nu \u2013 i n\u00e4tverksstacken, i lagringssubsystemet, i schemal\u00e4ggaren eller i en drivrutin?<\/p>\n\n<h2>Installera och starta perf top<\/h2>\n\n<p>Efter installationen via distributionspaketet k\u00f6r jag <strong>perf<\/strong> top k\u00f6rs vanligtvis med ut\u00f6kade beh\u00f6righeter s\u00e5 att k\u00e4rnsymboler och systemh\u00e4ndelser blir synliga. Det r\u00e4cker med att starta programmet med \u201eperf top\u201c f\u00f6r att skapa en f\u00f6rsta realtidsvy och identifiera dominerande funktioner. Om jag beh\u00f6ver fokusera p\u00e5 enskilda processer kopplar jag in <strong>PID<\/strong> med -p; f\u00f6r specifika processorer anv\u00e4nder jag -C med en lista eller ett intervall. H\u00e4ndelser anger jag med -e, till exempel cpu-cycles, instructions eller branch-misses, beroende p\u00e5 vilken fr\u00e5ga jag vill utreda. F\u00f6r att f\u00e5 reproducerbara resultat startar jag m\u00e4tningen under en verklig belastning, s\u00e5 att <strong>Hotspots<\/strong> tydligt framtr\u00e4da och inte f\u00f6rsvinna i tomg\u00e5ngsbruset.<\/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\/cpuhotspotslinux3746.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>S\u00e5 h\u00e4r l\u00e4ser jag tidningen p\u00e5 r\u00e4tt s\u00e4tt<\/h2>\n\n<p>I listan betygs\u00e4tter jag f\u00f6rst <strong>Procenttal<\/strong> per symbol, eftersom de \u00e5terspeglar de relativa tidsandelarna. H\u00f6ga andelar f\u00f6r systemfunktioner tyder p\u00e5 en flaskhals i k\u00e4rnan, medan dominerande symboler i anv\u00e4ndarutrymmet snarare pekar p\u00e5 applikationslogik. Om jag ser m\u00e5nga schemal\u00e4ggningsrutiner t\u00e4nker jag p\u00e5 f\u00f6r m\u00e5nga aktiva tr\u00e5dar, ogynnsamma affiniteter eller ol\u00e4mpliga prioriteringar. Om minnesfunktioner dyker upp h\u00f6gt upp p\u00e5 listan kontrollerar jag allokeringsm\u00f6nster, sidfel, NUMA-lokalitet och cacher. N\u00e4r det g\u00e4ller n\u00e4tverksv\u00e4gar tittar jag p\u00e5 IRQ-f\u00f6rdelning, Gro\/TSO-inst\u00e4llningar och drivrutinsbeteende, eftersom s\u00e5dana detaljer <strong>F\u00f6rdr\u00f6jning<\/strong> p\u00e5verka kraftigt.<\/p>\n\n<h2>Vanliga orsaker till hotspots i k\u00e4rnan<\/h2>\n\n<p>M\u00e5nga hotspots uppst\u00e5r eftersom m\u00e5nga sm\u00e5 kostnader sammantaget blir en stor <strong>Last<\/strong> summeras. Ofta \u00f6kar alltf\u00f6r m\u00e5nga kontextbyten, l\u00e5skonkurrens och oj\u00e4mnt f\u00f6rdelade IRQ:er CPU-tiden. P\u00e5 samma s\u00e4tt tar fragmenterade minnesstrukturer, ineffektiv anv\u00e4ndning av slab eller st\u00e4ndig paging upp on\u00f6diga cykler. Om jag uppt\u00e4cker en viss drivrutin korrelerar jag den med arbetsbelastning, h\u00e5rdvara och version f\u00f6r att begr\u00e4nsa bieffekter. P\u00e5 flerk\u00e4rniga system kontrollerar jag dessutom falsk delning, eftersom delade cache-linjer enligt k\u00e4rndokumentationen snabbt kan leda till kostsam <strong>Overhead<\/strong> kan orsaka.<\/p>\n\n<h2>Exempel p\u00e5 analys av en hotspot<\/h2>\n\n<p>Om jag ser att en viss typ av trafik har en konstant h\u00f6g andel i n\u00e4tverksrelaterade funktioner under en l\u00e4ngre tid, b\u00f6rjar jag med att dela upp trafiktyperna: sm\u00e5 kontra stora paket, TLS kontra klartext, m\u00e5nga anslutningar kontra f\u00e5 l\u00e5ngvariga sessioner, f\u00f6r att <strong>Orsak<\/strong> begr\u00e4nsa. D\u00e4refter f\u00f6rdjupar jag analysen med perf record och perf report, aktiverar callgraphs (-g) och j\u00e4mf\u00f6r s\u00f6kv\u00e4garna \u00f6ver flera k\u00f6rningar. Om det ist\u00e4llet \u00e4r minneshanteringen som \u00e4r problemet kontrollerar jag allokatorn, Huge Pages, THP-inst\u00e4llningarna och NUMA-affinitet, eftersom on\u00f6diga v\u00e4gar snabbt kan uppst\u00e5 h\u00e4r. Jag tolkar ofta schemal\u00e4ggarens hotspots som ett tecken p\u00e5 f\u00f6r m\u00e5nga k\u00f6rbara tr\u00e5dar eller en ol\u00e4mplig CPU-bindning. Jag \u00e4ndrar alltid bara en <strong>Parametrar<\/strong> per k\u00f6rning, s\u00e5 att jag kan koppla ihop effekten korrekt.<\/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-cpu-hotspots-perf-top-7351.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Perf Top i webbhotellsmilj\u00f6er<\/h2>\n\n<p>I webbhotellssammanhang ser jag ofta hur sm\u00e5 kostnader f\u00f6r k\u00e4rnan p\u00e5verkar <strong>F\u00f6rdr\u00f6jning<\/strong> fr\u00e5n m\u00e5nga tj\u00e4nster. Parallellt k\u00f6rda containrar, virtuella maskiner och databasinstanser f\u00f6rskjuter profilen tydligt mot n\u00e4tverk, lagring och schemal\u00e4ggare. Med perf top kan jag se om flaskhalsarna snarare ligger i IRQ-hantering, Softirq-bearbetning eller i l\u00e5sv\u00e4gar. D\u00e4refter tar jag med k\u00e4rnversionen, NUMA-layouten, IRQ-affiniteter och k\u00f6djup i analysen, eftersom dessa faktorer samverkar. Den som vill f\u00f6rdjupa sig ytterligare hittar i denna guide till <a href=\"https:\/\/webhosting.de\/sv\/linux-perf-verktyget-analys-av-cpu-flaskhalsar-optimering-serverbelastning-profilering\/\">Analysera flaskhalsar i CPU:n<\/a> ytterligare praktiska tillv\u00e4gag\u00e5ngss\u00e4tt som jag regelbundet anv\u00e4nder i mitt arbete.<\/p>\n\n<h2>Praktisk handbok f\u00f6r analys<\/h2>\n\n<p>Jag b\u00f6rjar med ett reproducerbart belastningsscenario s\u00e5 att m\u00e4tningarna f\u00f6rblir j\u00e4mf\u00f6rbara och <strong>Hotspots<\/strong> dyker upp stabilt. D\u00e4refter startar jag perf top och noterar de dominerande symbolerna \u00f6ver flera uppdateringar. Denna \u00f6gonblicksbild sammanfattar jag med perf record\/report till en tydlig bild av callgraferna, s\u00e5 att jag kan identifiera v\u00e4gen till den resurskr\u00e4vande delen. D\u00e4refter \u00e4ndrar jag m\u00e5lmedvetet bara en sak, till exempel en IRQ-affinitet eller en k\u00f6djup, och m\u00e4ter p\u00e5 nytt. F\u00f6rst n\u00e4r effekten \u00e4r tydlig g\u00e5r jag vidare till n\u00e4sta <strong>Steg<\/strong> genomg\u00e5 och dokumentera resultaten inf\u00f6r framtida underh\u00e5llsperioder.<\/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\/TechOffice_Nacht_CPUs_3421.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>N\u00e4r andra verktyg \u00e4r l\u00e4mpliga<\/h2>\n\n<p>F\u00f6r en historisk \u00f6versikt, mer detaljerade callgraphs eller specifika h\u00e4ndelsekedjor anv\u00e4nder jag <strong>perf<\/strong> record\/report, ftrace eller eBPF. Tracepoints hj\u00e4lper mig att belysa specifika v\u00e4gar, medan jag med BPF-program f\u00e5r fram flexibla m\u00e4tv\u00e4rden. N\u00e4r jag vill granska k\u00e4rnv\u00e4garna mer ing\u00e5ende ger <a href=\"https:\/\/webhosting.de\/sv\/ebpf-linux-analysverktyg-serveroevervakning-insikter\/\">eBPF-analysverktyg<\/a> v\u00e4rdefulla signaler direkt p\u00e5 plats. N\u00e4r det g\u00e4ller cache- och delningsproblem \u00e4r perf-c2c och pahole till stor hj\u00e4lp s\u00e5 snart hotspoten har identifierats tydligt. P\u00e5 s\u00e5 s\u00e4tt kan jag gradvis g\u00e5 fr\u00e5n live-vyn till orsaken utan att fastna i irrelevanta <strong>Detaljer<\/strong> ...att f\u00f6rlora.<\/p>\n\n<h2>Samplingsalternativ och filter i praktiken<\/h2>\n\n<p>Jag passar. <strong>Provtagning<\/strong>-strategi f\u00f6r att hantera fr\u00e5gan, ist\u00e4llet f\u00f6r att m\u00e4ta allt generellt. Vid sporadiska toppar \u00f6kar jag samplingsfrekvensen och f\u00f6rkortar visningsintervallen f\u00f6r att f\u00e5nga upp flyktiga toppar. F\u00f6r processfokus s\u00e4tter jag -p p\u00e5 den relevanta PID:en, f\u00f6r CPU-fokus -C p\u00e5 de aktiva k\u00e4rnorna. Med -e styr jag h\u00e4ndelsen, till exempel cpu-cycles f\u00f6r bred profilering eller cache-misses om jag misst\u00e4nker problem med minneshanteringen. Jag anv\u00e4nder callgraphs (-g) s\u00e5 snart jag grovt har lokaliserat en hotspot och <strong>Orsak<\/strong> som jag vill hitta i stacken.<\/p>\n\n<p>Tabellen nedan visar praktiska tangentkombinationer som jag ofta anv\u00e4nder i vardagen, samt typiska anv\u00e4ndningsomr\u00e5den f\u00f6r varje alternativ:<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Alternativ<\/th>\n      <th>Effekt<\/th>\n      <th>Anv\u00e4ndning<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td><strong>-p<\/strong> PID<\/td>\n      <td>Begr\u00e4nsar m\u00e4tningen till en process<\/td>\n      <td>Appspecifika <strong>Hotspots<\/strong> begr\u00e4nsa<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>-C<\/strong> Lista \u00f6ver processorer<\/td>\n      <td>Fokus p\u00e5 utvalda k\u00e4rnomr\u00e5den<\/td>\n      <td>Kontrollera NUMA\/IRQ-f\u00f6rdelningen<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>-e<\/strong> Evenemang<\/td>\n      <td>V\u00e4lj h\u00e5rdvaru- eller programvaruh\u00e4ndelse<\/td>\n      <td>cykler, instruktioner, cache-missar<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>-g<\/strong><\/td>\n      <td>Aktivera Callgraph-sampling<\/td>\n      <td>Dyra v\u00e4gar i <strong>Stack<\/strong> K\u00e4nna igen<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>\u2013k\u00e4rna\/\u2013anv\u00e4ndare<\/strong><\/td>\n      <td>Filtrerar p\u00e5 k\u00e4rn- eller anv\u00e4ndarniv\u00e5<\/td>\n      <td>Separera k\u00e4llan till CPU-tiden<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>\u2013sortering<\/strong><\/td>\n      <td>Sorterat efter symbol, DSO, dso:symbol<\/td>\n      <td>L\u00e4sbarheten hos <strong>Rankning<\/strong> \u00f6ka<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<p>Jag testar alltid konfigurationerna kort innan jag p\u00e5b\u00f6rjar l\u00e4ngre m\u00e4tningar, s\u00e5 att <strong>Visa<\/strong> f\u00f6rblir stabilt och att inga biverkningar uppst\u00e5r. S\u00e4rskilt vid h\u00f6g samplingsfrekvens \u00e4r jag uppm\u00e4rksam p\u00e5 overhead f\u00f6r att inte belasta systemet i on\u00f6dan. N\u00e4r det g\u00e4ller container-v\u00e4rdar kontrollerar jag dessutom om gr\u00e4nser f\u00f6r namnutrymmen och cgroups begr\u00e4nsar \u00f6verblicken. F\u00f6r att f\u00e5 reproducerbara prestandatester dokumenterar jag alla inst\u00e4llningar, inklusive k\u00e4rn- och drivrutinsversioner. Denna noggrannhet sparar mig mycket tid senare <strong>Tid<\/strong> vid tolkningen av f\u00f6r\u00e4ndringar.<\/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\/cpuhotspots_kernel1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Tolkning av delsystem: N\u00e4tverk, lagring, schemal\u00e4ggare<\/h2>\n\n<p>Om n\u00e4tverksv\u00e4garna st\u00e5r h\u00f6gst upp kontrollerar jag f\u00f6rst IRQ-affiniteter, RSS\/Receive-Side-Scaling och avlastningar som GRO\/TSO, eftersom dessa inst\u00e4llningsm\u00f6jligheter p\u00e5verkar <strong>Genomstr\u00f6mning<\/strong>-\u00c4ndra latensbalansen. Vid onormala minnesfunktioner tittar jag p\u00e5 allokeringsm\u00f6nster, Huge Pages, slab-statistik och frekvensen av sidfel. Schemal\u00e4ggarens belastning kopplar jag ofta till ett f\u00f6r stort antal tr\u00e5dar, bristande CPU-affinitet eller or\u00e4ttvis prioritering. F\u00f6r specifika k\u00e4rnh\u00e4ndelser s\u00e4tter jag dessutom in sp\u00e5rpunkter eller anv\u00e4nder <a href=\"https:\/\/webhosting.de\/sv\/bpftrace-snabbare-upptaeckt-och-diagnostik-av-serverproblem-vid-webbhotell\/\">bpftrace i webbhotellet<\/a>, f\u00f6r att bekr\u00e4fta hypoteser. P\u00e5 s\u00e5 s\u00e4tt kopplar jag samman observationerna i realtid fr\u00e5n perf top med m\u00e4tpunkter p\u00e5 djupare niv\u00e5er och kommer snabbare fram till sj\u00e4lva <strong>Orsak<\/strong>.<\/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\/linux-kernel-hotspots-7894.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Villkor och symbolernas synlighet<\/h2>\n\n<p>S\u00e5 att <strong>perf top<\/strong> N\u00e4r jag l\u00f6ser alla relevanta kernelsymboler \u00e4r jag noga med tv\u00e5 saker: r\u00e4tt beh\u00f6righeter och tillg\u00e4nglig symbolinformation. P\u00e5 produktionssystem \u00e4r <em>kernel.perf_event_paranoid<\/em> ofta inst\u00e4llt p\u00e5 ett h\u00f6gt v\u00e4rde. F\u00f6r djupg\u00e5ende inblick i k\u00e4rnan s\u00e4nker jag tillf\u00e4lligt detta v\u00e4rde eller arbetar som root med n\u00f6dv\u00e4ndiga beh\u00f6righeter (CAP_PERFMON\/CAP_SYS_ADMIN). Om k\u00e4rnans adresser \u00e4r dolda (<em>kptr_restrict<\/em>), ser jag oftast \u00e4nd\u00e5 namnen, men inga r\u00e5adresser \u2013 det r\u00e4cker f\u00f6r mig f\u00f6r att prioritera. F\u00f6r anv\u00e4ndarutrymmet installerar jag tillh\u00f6rande debuginfo-paket, s\u00e5 att perf top visar funktionsnamn ist\u00e4llet f\u00f6r offset. Det minskar gissandet och p\u00e5skyndar arbetet med att hitta orsaken.<\/p>\n\n<h2>Procenttal och fallgropar vid urvalsf\u00f6rfaranden<\/h2>\n\n<p>Jag tolkar procenttalen i listan som <strong>relativa andelar<\/strong> av de uppm\u00e4tta proverna, inte som exakt CPU-belastning \u00f6ver tid. Om jag v\u00e4ljer flera h\u00e4ndelser kan <strong>Multiplexering<\/strong> till\u00e4mpa: Perf f\u00f6rdelar kontringarna \u00f6ver tiden och <em>normaliserad<\/em> visningen. F\u00f6r att f\u00e5 en tydlig bild m\u00e4ter jag f\u00f6rst \u00f6vergripande med CPU-cykler eller instruktioner och l\u00e4gger till specialh\u00e4ndelser senare. Kortvariga toppar f\u00e5ngar jag upp med h\u00f6gre frekvens (-F) och kortare intervall; f\u00f6r system i vilol\u00e4ge r\u00e4cker standardfrekvensen. Jag beaktar dessutom att <strong>Inaktiv<\/strong>-Faser och frekvensf\u00f6r\u00e4ndringar (Turbo, Governor) kan p\u00e5verka uppfattningen. F\u00f6r j\u00e4mf\u00f6rande m\u00e4tningar standardiserar jag d\u00e4rf\u00f6r klock- och energiinst\u00e4llningarna.<\/p>\n\n<h2>En djupg\u00e5ende analys av callgraphs<\/h2>\n\n<p>N\u00e4r jag har identifierat en hotspot f\u00f6rb\u00e4ttrar jag analysen med hj\u00e4lp av callgraphs. Med <strong>-g<\/strong> och med en l\u00e4mplig unwinding-metod f\u00e5r jag fram s\u00f6kv\u00e4gen till den kostsamma delen. Frame-Pointer eller DWARF-Unwinding ger mig stabila stackar; d\u00e4r det \u00e4r m\u00f6jligt anv\u00e4nder jag h\u00e5rdvarubaserade \u00e5terhoppbuffertar (LBR) f\u00f6r mycket exakta kedjor. Jag \u00f6kar mmap-buffertarna endast s\u00e5 mycket som n\u00f6dv\u00e4ndigt f\u00f6r att h\u00e5lla overheaden l\u00e5g. Om stacken visar m\u00e5nga hj\u00e4lpfunktioner \u00e4r jag noga med att <strong>inklusive<\/strong> mot. <strong>exklusivt<\/strong> Kostnader: Det avg\u00f6rande \u00e4r om funktionen i sig \u00e4r kostsam eller om den endast dominerar som genomstr\u00f6mningsv\u00e4g. Denna distinktion sparar mig ofta timmar i orsaksutredningen.<\/p>\n\n<h2>Arbeta i containrar och virtuella maskiner<\/h2>\n\n<p>I container-milj\u00f6er kontrollerar jag om min vy av <strong>cgroups<\/strong> och att namnutrymmena \u00e4r korrekta. Jag fokuserar m\u00e4tningarna p\u00e5 de relevanta PID:erna och CPU:erna, s\u00e5 att \u201dbullriga grannar\u201d inte f\u00f6rvr\u00e4nger bilden. F\u00f6r virtuella maskiner kontrollerar jag om den virtuella PMU:n \u00e4r aktiverad; annars saknar jag exakta h\u00e5rdvaruh\u00e4ndelser och ser fr\u00e4mst mjukvarusignaler. KVM-v\u00e4rdar k\u00e4nner jag ofta igen p\u00e5 symboler runt <em>kvm_vcpu<\/em> eller . <em>vmx<\/em>\/<em>svm<\/em>. I s\u00e5dana situationer skiljer jag tydligt mellan v\u00e4rd- och g\u00e4stanalyser f\u00f6r att inte blanda ihop orsak och verkan.<\/p>\n\n<h2>Tydliga m\u00f6nster och snabba hypoteser<\/h2>\n\n<p>I vardagen har vissa m\u00f6nster visat sig fungera bra, och dem kontrollerar jag omedelbart:<\/p>\n<ul>\n  <li><strong>Lock-konkurrens<\/strong>: Dykning <em>queued_spin_lock_slowpath<\/em> eller . <em>mutex_spin_on_owner<\/em> Om det uppst\u00e5r problem p\u00e5 den \u00f6vre niv\u00e5n beror det p\u00e5 att datastrukturerna \u00e4r f\u00f6r grovt uppdelade eller att arbetsk\u00f6erna \u00e4r f\u00f6r tr\u00e5nga. Jag minskar konkurrensen genom sharding, finare l\u00e5sgranularitet eller \u00e4ndrade batchstorlekar.<\/li>\n  <li><strong>Scheduler-utskrift<\/strong>: Blir allt vanligare <em>schedule()<\/em>, <em>pick_next_task_fair<\/em> eller wakeup-v\u00e4gar, justerar jag antalet tr\u00e5dar, affiniteter och prioriteringar. Ofta r\u00e4cker det med att d\u00e4mpa \u201cpratsamma\u201d tr\u00e5dar eller att tydligt definiera CPU-inst\u00e4llningarna.<\/li>\n  <li><strong>N\u00e4tverks-Softirqs<\/strong>: Toppar vid <em>net_rx_action<\/em>, <em>napi_poll<\/em> Eller s\u00e5 kan checksum-offloads tyda p\u00e5 paketstormar eller en suboptimal f\u00f6rdelning av RSS och IRQ. Jag tilldelar IRQ:er till l\u00e4mpliga k\u00e4rnor och justerar GRO\/TSO f\u00f6r den \u00f6nskade genomstr\u00f6mnings- och latensprofilen.<\/li>\n  <li><strong>Lagringsv\u00e4gar<\/strong>: Mycket tid i <em>do_page_fault<\/em>, <em>copy_user_*<\/em> Eller med hj\u00e4lp av Slab-funktioner kan jag kontrollera allokeringsm\u00f6nster, THP\/Huge Pages och NUMA-lokalitet. Felaktig placering kostar h\u00e4r obem\u00e4rkt v\u00e4ldigt m\u00e5nga cykler.<\/li>\n  <li><strong>RCU och timers<\/strong>: Dominera <em>rcu_core<\/em> eller timer-callbacks, s\u00e5 ser jag \u00f6ver polling- och batch-strategierna f\u00f6r mina tj\u00e4nster f\u00f6r att f\u00e5 systemet att fungera smidigare.<\/li>\n<\/ul>\n\n<h2>F\u00f6rdjupa kunskaperna om m\u00e4tdisciplin och reproducerbarhet<\/h2>\n\n<p>F\u00f6r att f\u00e5 tydligt j\u00e4mf\u00f6rbara testk\u00f6rningar h\u00e5ller jag omgivningsfaktorerna konstanta: CPU-regulator, turbol\u00e4gen, bakgrundsjobb och till och med rumstemperaturen vid t\u00e4tt packade noder. Jag kopplar testbelastningarna till definierade k\u00e4rnor och isolerar vid behov \u00f6verbelastade CPU:er, s\u00e5 att schemal\u00e4ggarens beslut f\u00f6rblir stabila. Jag dokumenterar \u00e4ndringar tillsammans med versioner av k\u00e4rnan, drivrutinerna och firmware. Vid mer riskfyllda justeringar planerar jag in \u00e5terst\u00e4llningspunkter och m\u00e4ter om omedelbart efter ingreppet. P\u00e5 s\u00e5 s\u00e4tt f\u00e5r jag en tillf\u00f6rlitlig <strong>F\u00f6re\/Efter<\/strong>-En historia som jag fortfarande kan f\u00f6rst\u00e5, \u00e4ven flera m\u00e5nader senare.<\/p>\n\n<h2>Praktiska tips: Kommandon som jag ofta anv\u00e4nder<\/h2>\n\n<p>Beroende p\u00e5 fr\u00e5gan anv\u00e4nder jag kortfattade recept:<\/p>\n<ul>\n  <li><strong>Omfattande scoping under belastning<\/strong>: perf top -e cpu-cycles \u2013kernel \u2013user<br\/>En snabb \u00f6versikt \u00f6ver om det \u00e4r k\u00e4rnan eller anv\u00e4ndarutrymmet som best\u00e4mmer.<\/li>\n  <li><strong>Processfokus med Callgraph<\/strong>: perf top -p PID -g \u2013kernel \u2013user<br\/>Visa mig realtidssp\u00e5r f\u00f6r den aktuella applikationen, utan systembuller.<\/li>\n  <li><strong>Fokus p\u00e5 CPU:n<\/strong>: perf top -C 2-5 -e cpu-cycles -g<br\/>Hj\u00e4lper vid NUMA- eller IRQ-hotspots n\u00e4r endast ett f\u00e5tal k\u00e4rnor \u201cgl\u00f6der\u201d.<\/li>\n  <li><strong>Misstankar om lagring<\/strong>: perf top -e cache-misses -e cycles -g \u2013kernel<br\/>Visar lagringsv\u00e4gar i f\u00f6rh\u00e5llande till cykler.<\/li>\n  <li><strong>F\u00e4sta tillf\u00e4lliga spikar<\/strong>: perf top -F 999 -I 1000 -e cykler<br\/>H\u00f6gre frekvens och kortare visningsintervall f\u00e5ngar upp korta toppar.<\/li>\n<\/ul>\n\n<h2>Tolkningshj\u00e4lpmedel f\u00f6r specifika delsystem<\/h2>\n\n<p>P\u00e5 <strong>N\u00e4tverk<\/strong> F\u00f6rutom NAPI och RX\/TX-v\u00e4gar \u00f6vervakar jag \u00e4ven TLS\/krypto-andelar, som kan dominera vid h\u00f6g handskakningsvolym. Jag kontrollerar om Zero-Copy respektive coalescing fungerar som avsett och om stora segment (TSO\/GSO) \u00f6verskrider mina latensbudgetar. I <strong>Minne<\/strong>-omr\u00e5det tittar jag p\u00e5 THP: Hj\u00e4lper det min belastning, eller orsakar split-\/merge-h\u00e4ndelser st\u00f6rningar? Vid <strong>F\u00f6rvaring<\/strong> tolkar jag <em>blk_mq<\/em>-symboler och io_uring-v\u00e4gar som indikation p\u00e5 k\u00f6djup och sammanfogningsstrategier. Vid <strong>schemal\u00e4ggare<\/strong> Jag kopplar samman Wakeup-laviner med Lock- eller IO-kedjor och j\u00e4mnar ut v\u00e4garna genom backpressure ist\u00e4llet f\u00f6r \u201cfler tr\u00e5dar\u201d.<\/p>\n\n<h2>Gr\u00e4nserna f\u00f6r perf top och n\u00e4r jag byter taktik<\/h2>\n\n<p>D\u00e4rf\u00f6r att <strong>perf top<\/strong> Eftersom det \u00e4r baserat p\u00e5 stickprov ser jag snarare genomsnittsbilder \u00e4n enskilda h\u00e4ndelser. F\u00f6r deterministiska fl\u00f6den byter jag till tracepoints, ftrace eller eBPF f\u00f6r att p\u00e5visa exakta orsakssamband. Om jag beh\u00f6ver exakt kvantifiering (t.ex. instruktioner per beg\u00e4ran) kombinerar jag med <strong>perf stat<\/strong> eller offline-analyser fr\u00e5n perf record\/report. Om jag st\u00f6ter p\u00e5 otydliga stackar (saknade symboler, felaktig avveckling) \u00e5tg\u00e4rdar jag f\u00f6rst synligheten \u2013 allt annat vore som att famla i blindo.<\/p>\n\n<h2>Kortfattat sammanfattat<\/h2>\n\n<p>Med <strong>perf top<\/strong> Jag ser i realtid var i k\u00e4rnan CPU:n tar tid och vilka symboler jag b\u00f6r unders\u00f6ka f\u00f6rst. Utifr\u00e5n procentv\u00e4rdena, \u00e5terkommande m\u00f6nster och uppdelningen mellan k\u00e4rn- och anv\u00e4ndarutrymmet drar jag slutsatser om vilka specifika n\u00e4sta steg jag b\u00f6r ta. Sedan sammanfattar jag resultaten med perf record\/report, verifierar f\u00f6r\u00e4ndringar under belastning och dokumenterar min m\u00e4tkedja. I hostingmilj\u00f6er l\u00f6nar sig detta tillv\u00e4gag\u00e5ngss\u00e4tt s\u00e4rskilt v\u00e4l, eftersom m\u00e5nga tj\u00e4nster och containrar drar nytta av varandra s\u00e5 snart k\u00e4rnv\u00e4gssekvenserna k\u00f6rs mer effektivt. Den som till\u00e4gnar sig denna process sparar flera dagars diagnostikarbete och minskar <strong>F\u00f6rdr\u00f6jningar<\/strong> och uppn\u00e5r m\u00e4rkbart stabilare svarstider under verklig belastning.<\/p>","protected":false},"excerpt":{"rendered":"<p>perf top Linux visar CPU-hotspots i k\u00e4rnan i realtid. P\u00e5 s\u00e5 s\u00e4tt kan man snabbt utf\u00f6ra CPU-profilering och g\u00f6ra en noggrann analys av flaskhalsar.<\/p>","protected":false},"author":1,"featured_media":20619,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[780],"tags":[],"class_list":["post-20626","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administration-anleitungen"],"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":"120","_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":"perf top","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":"20619","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts\/20626","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=20626"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts\/20626\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media\/20619"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media?parent=20626"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/categories?post=20626"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/tags?post=20626"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}