Förbättra prestandan för dina Go-program med hjälp av profileringstekniken.

Profilering är en teknik som vanligtvis används i mjukvaruutvecklingscykeln för att analysera prestandan hos en program, vanligtvis för en jämförelse mellan program eller för att identifiera flaskhalsar och förbättringsområden för en program. Profilering innebär att mäta och analysera olika mätvärden som minnesanvändning, CPU-användning, exekveringstid och annan statistik på systemnivå.

Profilering syftar till att identifiera delar av ett program som förbrukar mest resurser så att det kan optimeras för bättre prestanda. Profilering kan också hjälpa till med felsökning, optimering av minneshantering och samtidig justering.

Profilering i Go

Det finns många verktyg för profilering i Go. Några populära verktyg inkluderar Gos inbyggda pprof-profileringsverktyg och populära tredjepartspaket som Go Tool Trace och Go-Torch-paketen.

De pprof paketet är en del av körning paket. De pprof paketet tillhandahåller funktionalitet för att skriva runtime profileringsdata i format som pprof visualiseringsverktyg kan tolka.

instagram viewer

Så här kan du importera pprof paketera i dina Go-program:

importera"pprof"

Go ger flera kommandon och flaggor att arbeta med källkoden. Kör följande verktyg kommando för att komma åt profileringsresultat i olika format.

 verktyg pprof

Kommandot matar ut användningsdetaljer om pprof kommando.

CPU-profilering i Go

CPU-profilering mäter den tid ett program tillbringar när det kör funktioner. CPU-profilering är användbar för att identifiera delar av koden som förbrukar mest CPU-tid.

De pprof Paketet innehåller funktioner för att samla in CPU-profiler, starta och stoppa CPU-profilering och en funktion för att skriva profildata till filer.

Så här startar och stoppar du en CPU-profil och skriver data till en profileringsfil:

importera (
"os"
"runtime/pprof"
)

funchuvud() {
f, fel := os. Skapa("cpu_profile.prof")
om fel!= noll {
panik(fela)
}
uppskjuta f. Stänga()

fel = pprof. StartCPUProfil (f)
om fel!= noll {
panik(fela)
}
uppskjuta pprof. StopCPUProfile()

// kod som ska profileras
}

De huvud funktionen skapar en fil och stänger filströmmen med en uppskjuta uttalande och Stänga funktion för filinstansen. De StartCPUProfil funktionen startar en CPU-profil och skriver data till filen, och StopCPUProfil stänger profilströmmen med en uppskjuta påstående. Efter att ha startat och stoppat CPU-profilen kan du fortsätta att skriva koden du vill analysera.

Här är resultatet av att köra pprof kommando med profilfilen från programmet:

Kör pprof kommando med en fil startar ett interaktivt skal som låter dig utforska profileringsdata. Du kan använda kommandon som topp och lista för att se de funktioner som tar längst tid att utföra.

Minnesprofilering i Go

Minnesprofilering är en teknik som används för att identifiera minnesläckor och dyr minnesanvändning i kod genom att mäta minnesanvändningen av funktioner i kod.

Du kan starta en minnesprofil med WriteHeapProfile fungera. De WriteHeapProfile funktionen tar in filinstans och skriver profildata till filen.

importera (
"os"
"runtime/pprof"
)

funchuvud() {
f, fel := os. Skapa("mem_profile.prof")
om fel!= noll {
panik(fela)
}
uppskjuta f. Stänga()

fel = pprof. WriteHeapProfile (f)
om fel!= noll {
panik(fela)
}

// kod som ska profileras
}

De huvud funktionen skapar en profileringsfil och WriteHeapProfile funktionen tar in filinstansen som ett argument och returnerar en skrivfelstyp efter att ha skrivit till filen. Du kan vidare hantera felet enligt dina krav.

Blockera profilering med Go

Blockprofilering mäter ett programs väntetid för synkroniseringsprimitiver, såsom mutexer och kanaler. Blockprofilering är användbar för att identifiera delar av koden som kan orsaka blockering.

De Slå upp funktionen returnerar profilen med namnet på en angiven sträng och Skriva till funktion av Slå upp funktion skriver en pprof-formaterad ögonblicksbild av profilen till filen.

Så här kan du implementera blockprofilering för dina Go-program:

importera (
"os"
"runtime/pprof"
)

funchuvud() {
f, fel := os. Skapa("block_profile.prof")
om fel!= noll {
panik(fela)
}
uppskjuta f. Stänga()

fel = pprof. Slå upp("blockera").WriteTo (f, 0)
om fel!= noll {
panik(fela)
}

// kod som ska profileras
}

Programmet skapar en fil för att lagra blockprofildata, letar efter block med Slå upp funktion och skriver blockprofildata till filen.

Spåra profilering med Go

Spårningsprofilering är en teknik för att mäta exekveringen av ett program, inklusive schemaläggning av goroutin och systemanrop. Spårningsprofilering är användbar för att identifiera prestandaflaskhalsar och förstå interaktionerna mellan olika programdelar.

De spår paketet innehåller funktioner för spårprofilering. Detta paket är också en del av körning paket.

importera (
"os"
"runtime/trace"
)

funchuvud() {
f, fel := os. Skapa("spåra ut")
om fel!= noll {
panik(fela)
}
uppskjuta f. Stänga()

fel = spåra. Start (f)
om fel!= noll {
panik(fela)
}
uppskjuta spår. Sluta()

// kod som ska profileras
}

Programmet skapar en spårningsfil för att lagra spårningsdata, startar spåraren med Start funktion som tar in filinstansen och returnerar en feltyp och skjuter upp spåraren med Sluta fungera.

Go tillhandahåller också verktyg för att formatera källkod. Vid sidan av profileringsverktygen kan du använda formateringsverktygen för att upprätthålla kodstandarder. De gofmt tool är ett inbyggt formateringsverktyg som du kan använda för att formatera din Go-källkod baserat på angivna regler för dina paket.