strace och perf: Linux felsökningsfuskblad
13 min läsning - 4 juni 2026

När man ska använda strace vs perf på Linux, vilka kommandon man faktiskt kör och hur man håller overhead nere när man felsöker en upptagen produktionsserver.
strace och perf för felsökning i Linux
När en Linux-server är långsam, kraschar eller överbelastar processorn och applikationsloggarna inte förklarar varför, täcker två verktyg det mesta av luckan. strace visar vad en process begär av kärnan. perf visar var CPU:n lägger sin tid. Tillsammans besvarar de frågorna ”varför har den fastnat” och ”vad gör den”, vilket inget annat verktyg klarar lika kostnadseffektivt.
Det här inlägget handlar om när du ska använda respektive verktyg, hur du installerar dem, vilka kommandon du faktiskt ska köra och hur du håller driftskostnaderna hanterbara på en live-server.
När ska man använda strace respektive perf
Skillnaden är enkel. Använd perf när CPU:n är upptagen och du behöver veta vilken funktion som är ansvarig. Använd strace när en process hänger sig, kraschar, returnerar konstiga fel eller beter sig på ett sätt som loggarna inte förklarar.
perf samplar kärnans hårdvaruräknare med en konfigurerbar frekvens, så overheaden är vanligtvis under 1 % och det är säkert att köra i produktion. strace avlyssnar varje systemanrop genom ptrace, vilket kan göra målprocessen 10 till 100 gånger långsammare. Använd det sparsamt på live-system och alltid med filter.
| Symptom | Börja med | Följ upp med |
|---|---|---|
| Hög CPU-användning | perf top eller perf record -g | strace -c på den aktiva processen |
| Långsam disk eller I/O-väntetid | perf stat för cachemissar | strace -e trace=file |
| Processen hänger sig eller tyst fel | strace -e trace=file,network | perf stat för att utesluta CPU-belastning |
| Låskonflikter eller långsam API | strace -c, håll utkik efter futex | perf record -g |
Installera strace och perf
Båda verktygen finns i standardrepositorierna. strace bygger på ptrace syscall, som har varit en del av alla moderna kärnor i flera år. perf använder perf_events gränssnittet och kräver ett paket som passar din aktuella kärna.
sudo apt install strace linux-tools-common linux-tools-$(uname -r)
På RHEL, AlmaLinux eller Fedora:
sudo dnf install strace perf
Varje $(uname -r) bit är viktig. En perf-binärfil som är byggd mot en annan kärnversion ger förvirrande utdata och kan tysta bort händelser. Verifiera med perf --version och strace -V efter installationen.
För att perf ska visa funktionsnamn istället för hexadresser behöver du felsökningssymboler. Installera relevant -dbg eller -debuginfo paketet (till exempel libc6-dbg på Debian) och kompilera dina egna binärer med -g i GCC.
Inuti containrar strace behövs --cap-add=SYS_PTRACE och perf behövs --cap-add=SYS_ADMIN vid start med Docker. Utan dessa begränsningar misslyckas verktygen på sätt som ser ut som buggar.
Spåra systemanrop med strace
Att köra strace command spårar en process från start. För att ansluta till en pågående process, använd strace -p PID. För allt som är multitrådat eller som förgrenar sig, lägg till -f för att följa barnprocesser, annars missar du det mesta av aktiviteten.
Utmatningsraderna avslutas med ett returvärde. -1 ENOENT betyder att filen som processen begärde inte finns där. -1 EACCES betyder behörigheter. Dessa två fel står själva för en överraskande stor andel av produktionsbuggarna.
Den mest användbara flaggan är -e trace=GROUP, som begränsar utmatningen till en namngiven kategori av systemanrop och håller bruset hanterbart.
| Grupp | anrop ingår | Vad den är bra för |
|---|---|---|
file | openat, stat, read, write | Saknade konfigurationer, behörighetsfel, långsam I/O |
network | socket, connect, bind, recvfrom | Anslutning nekad, DNS-fel, TLS-problem |
process | execve, clone, wait4 | Krascher, fork-stormar, saknade binärer |
futex | futex | Låskonflikter och trådstopp |
På en upptagen server, börja med strace -c -p PID i tio eller tjugo sekunder. Flaggan -c flaggan skriver ut en sammanfattning av antalet systemanrop, total tid och fel när du kopplar bort. Det visar vilken kategori som är värd en närmare titt utan att översvämma terminalen. Koppla sedan in igen med ett snävt filter.
Andra flaggor som är värda att känna till: -T loggar tiden som spenderas på varje anrop, -Z visar endast misslyckade anrop, och -o file skriver till en logg istället för terminalen, vilket är mycket snabbare vid en process med mycket utdata.
Profilera CPU med perf
perf har fyra kommandon som du kommer att använda oftast.
| Kommando | Vad det gör | Vanliga flaggor |
|---|---|---|
perf stat | Översikt över mätare: cykler, cachemissar, kontextbyten | -e, -p, -a |
perf top | Live-vy av de mest använda funktionerna i systemet | --sort comm,dso,symbol |
perf record | Samlar in prover för perf.data offlineanalys | -F, -g, -p |
perf report | Läser perf.data, rangordnar funktioner efter andel av prover | --stdio, --sort |
Börja med perf stat -p PID för en snabb översikt. Siffrorna att hålla koll på:
- IPC (instruktioner per cykel) under 1,0: CPU:n stannar upp, vanligtvis vid minnesåtkomst.
- Högt antal LLC-load-misses: arbetsuppsättningen ryms inte i cachen, så CPU:n väntar på RAM.
- Högt antal kontextbyten: klassiskt för I/O-bundna arbetsbelastningar där trådar hela tiden blockeras på disk eller nätverk.
Om något verkar fel, följ upp med perf record -F 99 -g -p PID -- sleep 30. -F 99 samplar vid 99 Hz, vilket är tillräckligt för att hitta heta funktioner och undviker synkronisering med kärntimern vid jämna tal som 100 Hz. -g flaggan fångar upp anropsgrafer så att perf report kan visa vilka vägar in i en funktion som är ansvariga.
I perf reportkolumnen Overhead anges andelen av det totala antalet samplar. Hög overhead i _int_malloc eller memcpy betyder stor allokering. Hög overhead i en av dina egna funktioner är den hotspot du letade efter.
Om du ser hexadresser istället för funktionsnamn är binärfilen strippad eller så saknas felsökningssymboler. Installera motsvarande -dbg paketet, eller bygg om binärfilen med -g.
Ett praktiskt arbetsflöde på en live-server
Vid en verklig incident på en upptagen box ser rutinen ut så här:
- Bekräfta först symptomen med enkla verktyg:
top,vmstat,iostat. Om du använder en virtuell maskin, kontrollera kolumnenst(stjäl) kolumnen. Allt över 5 % betyder att hypervisorn är flaskhalsen, inte din kod. - Om CPU-användningen är hög, kör
perf topi några sekunder, och sedanperf record -F 99 -g -p PID -- sleep 30för den aktuella processen. En 30 sekunders inspelning vid 99 Hz ger cirka 1,7 MB data. - Om processen har hängt sig, är långsam eller returnerar fel, kör
strace -c -p PIDi tio sekunder och läs sammanfattningen. Om en syscall-kategori dominerar, begränsa medstrace -e trace=GROUP -T -p PID. - När du har hittat det misstänkta systemanropet eller funktionen, koppla bort. Låt inte något av verktygen köras i produktionsmiljön längre än nödvändigt.
Två varningar. strace Utdata kan innehålla miljövariabler, filvägar och byte som lästs från socklar, så rensa loggarna innan du delar dem utanför ditt team. Och om du ska göra detta regelbundet, titta på bpftrace och det bredare eBPF-verktygssetet som nästa steg: samma typ av insyn, mindre än 1 % overhead, byggt för produktion från början.
Om du kör arbetsbelastningar där djup diagnostisk åtkomst är viktig och delad infrastruktur inte är ett alternativ, ta en titt på våra dedikerade servrar.

FDC VPS levereras med NVMe-diskar, EPYC-processorer och obegränsad bandbredd som standard. Är du redo att uppgradera?
Lås upp prestanda nuVarför det är viktigt att ha en kraftfull och omättad VPS
En VPS utan mätning ger bandbredd till fast pris med en fast porthastighet. Hur det skiljer sig från uppmätta planer, när det lönar sig och vad du ska kontrollera innan du köper.
7 min läsning - 9 maj 2025
Linux minneshantering: Swap, OOM Killer & Cgroups
12 min läsning - 31 maj 2026

Har du frågor eller behöver du en anpassad lösning?
Flexibla alternativ
Global räckvidd
Omedelbar driftsättning
Flexibla alternativ
Global räckvidd
Omedelbar driftsättning