Verbeter de prestaties van uw Go-programma's met behulp van de profileringstechniek.

Profilering is een techniek die vaak wordt gebruikt in de softwareontwikkelingscyclus om de prestaties van een programma, meestal voor een vergelijking tussen programma's of om knelpunten en verbeterpunten voor a programma. Profilering omvat het meten en analyseren van verschillende statistieken, zoals geheugengebruik, CPU-gebruik, uitvoeringstijd en andere statistieken op systeemniveau.

Profilering is bedoeld om delen van een programma te identificeren die de meeste bronnen verbruiken, zodat het kan worden geoptimaliseerd voor betere prestaties. Profilering kan ook helpen bij het opsporen van fouten, het optimaliseren van geheugenbeheer en het afstemmen van gelijktijdigheid.

Profileren in Go

Er zijn veel tools voor profilering in Go. Enkele populaire tools zijn Go's ingebouwde pprof-profileringstool en populaire pakketten van derden, zoals de Go Tool Trace- en Go-Torch-pakketten.

De pprof pakket maakt deel uit van de

looptijd pakket. De pprof pakket biedt functionaliteit voor het schrijven van runtime-profileringsgegevens in formaten die de pprof visualisatietool kan interpreteren.

Hier leest u hoe u de pprof pakket in uw Go-programma's:

importeren"pprof"

Go biedt verschillende opdrachten en vlaggen om met de broncode te werken. Voer het volgende uit hulpmiddel commando om toegang te krijgen tot profileringsresultaten in verschillende formaten.

gaan gereedschap pprof

De opdracht voert de gebruiksdetails over de pprof commando.

CPU-profilering in Go

CPU-profilering meet de tijd die een programma besteedt aan het uitvoeren van functies. CPU-profilering is handig voor het identificeren van delen van de code die de meeste CPU-tijd verbruiken.

De pprof pakket biedt functies voor het verzamelen van CPU-profielen, het starten en stoppen van CPU-profilering en een functie voor het schrijven van profielgegevens naar bestanden.

Zo start en stopt u een CPU-profiel en schrijft u de gegevens naar een profileringsbestand:

importeren (
"os"
"runtime/pprof"
)

funcvoornaamst() {
f, fout := os. Creëren("cpu_profile.prof")
als fout!= nihil {
paniek(fout)
}
verschuiven F. Dichtbij()

fout = pprof. StartCPUProfiel (f)
als fout!= nihil {
paniek(fout)
}
verschuiven pprof. StopCPUProfiel()

// te profileren code
}

De voornaamst functie maakt een bestand aan en sluit de bestandsstroom met een verschuiven verklaring en de Dichtbij functie van de bestandsinstantie. De Start CPUProfile functie start een CPU-profiel en schrijft de gegevens naar het bestand, en de Stop CPU-profiel sluit de profielstream af met een verschuiven stelling. Nadat u het CPU-profiel hebt gestart en gestopt, kunt u doorgaan met het schrijven van de code die u wilt analyseren.

Hier is het resultaat van het uitvoeren van de pprof commando met het profielbestand van het programma:

Het runnen van de pprof commando met een bestand start een interactieve shell waarmee u de profileringsgegevens kunt verkennen. U kunt opdrachten gebruiken zoals bovenkant En lijst om de functies te bekijken die de meeste tijd kosten om uit te voeren.

Geheugenprofilering in Go

Geheugenprofilering is een techniek die wordt gebruikt om geheugenlekken en duur geheugengebruik in code te identificeren door het geheugengebruik van functies in code te meten.

U kunt een geheugenprofiel starten met de SchrijfHeapProfile functie. De SchrijfHeapProfile functie neemt de bestandsinstantie in en schrijft de profielgegevens naar het bestand.

importeren (
"os"
"runtime/pprof"
)

funcvoornaamst() {
f, fout := os. Creëren("mem_profile.prof")
als fout!= nihil {
paniek(fout)
}
verschuiven F. Dichtbij()

fout = pprof. WriteHeapProfile (f)
als fout!= nihil {
paniek(fout)
}

// te profileren code
}

De voornaamst functie maakt een profileringsbestand aan en de SchrijfHeapProfile functie neemt de bestandsinstantie als argument en retourneert een type schrijffout na het schrijven naar het bestand. U kunt verder behandel de fout volgens uw vereiste.

Blokkeer profilering met Go

Blokprofilering meet de wachttijd van een programma voor synchronisatieprimitieven, zoals mutexen en kanalen. Blokprofilering is handig voor het identificeren van delen van de code die blokkering kunnen veroorzaken.

De Opzoeken functie retourneert het profiel met de naam van een opgegeven tekenreeks, en de Schrijven aan functie van de Opzoeken functie schrijft een pprof-geformatteerde momentopname van het profiel naar het bestand.

Zo kunt u blokprofilering voor uw Go-programma's implementeren:

importeren (
"os"
"runtime/pprof"
)

funcvoornaamst() {
f, fout := os. Creëren("block_profile.prof")
als fout!= nihil {
paniek(fout)
}
verschuiven F. Dichtbij()

fout = pprof. Opzoeken("blok").SchrijvenNaar (f, 0)
als fout!= nihil {
paniek(fout)
}

// te profileren code
}

Het programma maakt een bestand aan voor het opslaan van de blokprofielgegevens, zoekt naar blokken met de Opzoeken functie en schrijft de blokprofielgegevens naar het bestand.

Traceren van profielen met Go

Trace-profilering is een techniek voor het meten van de uitvoering van een programma, inclusief goroutineplanning en systeemoproepen. Trace-profilering is nuttig voor het identificeren van prestatieknelpunten en het begrijpen van de interacties tussen verschillende programmaonderdelen.

De spoor pakket biedt functies voor traceerprofilering. Dit pakket maakt ook deel uit van de looptijd pakket.

importeren (
"os"
"runtime/trace"
)

funcvoornaamst() {
f, fout := os. Creëren("traceren")
als fout!= nihil {
paniek(fout)
}
verschuiven F. Dichtbij()

fout = spoor. Begin (v)
als fout!= nihil {
paniek(fout)
}
verschuiven spoor. Stop()

// te profileren code
}

Het programma maakt een traceerbestand om de traceergegevens op te slaan, start de tracer met de Begin functie die de bestandsinstantie opneemt en een fouttype retourneert, en de tracer uitstelt met de Stop functie.

Go biedt ook hulpmiddelen voor het formatteren van de broncode. Naast de profileringstools kunt u de opmaaktools gebruiken om codestandaarden te onderhouden. De gofmt tool is een ingebouwde opmaaktool die u kunt gebruiken om uw Go-broncode op te maken op basis van gespecificeerde regels voor uw pakketten.