Îmbunătățiți performanța programelor dvs. Go folosind tehnica de profilare.
Profilarea este o tehnică utilizată în mod obișnuit în ciclul de dezvoltare software pentru a analiza performanța unui program, de obicei pentru o comparație între programe sau pentru a identifica blocajele și zonele de îmbunătățire pentru a program. Profilarea implică măsurarea și analiza diferitelor valori, cum ar fi utilizarea memoriei, utilizarea CPU, timpul de execuție și alte statistici la nivel de sistem.
Profilarea are ca scop identificarea părților unui program care consumă cele mai multe resurse, astfel încât să poată fi optimizat pentru o performanță mai bună. Profilarea poate ajuta, de asemenea, la depanare, la optimizarea gestionării memoriei și la reglarea concurenței.
Profilare în Go
Există multe instrumente de profilare în Go. Unele instrumente populare includ instrumentul de profilare pprof încorporat de la Go și pachetele populare de la terțe părți, cum ar fi pachetele Go Tool Trace și Go-Torch.
The
pprof pachetul face parte din timpul de rulare pachet. The pprof pachetul oferă funcționalitate pentru scrierea datelor de profilare în timpul rulării în formate pe care pprof instrumentul de vizualizare poate interpreta.Iată cum puteți importa pprof pachet în programele dvs. Go:
import"pprof"
Go oferă mai multe comenzi și steaguri pentru a lucra cu codul sursă. Rulați următoarele instrument comandă pentru a accesa rezultatele profilării în diferite formate.
merge instrument pprof
Comanda afișează detaliile de utilizare despre pprof comanda.
Profilare CPU în Go
Profilarea CPU măsoară timpul petrecut de un program în timp ce execută funcții. Profilarea CPU este utilă pentru identificarea părților de cod care consumă cel mai mult timp CPU.
The pprof pachetul oferă funcții pentru colectarea profilurilor CPU, pornirea și oprirea profilării CPU și o funcție pentru scrierea datelor de profil în fișiere.
Iată cum să porniți și să opriți un profil CPU și să scrieți datele într-un fișier de profilare:
import (
"os"
"runtime/pprof"
)funcprincipal() {
f, err := os. Crea("cpu_profile.prof")
dacă greș!= zero {
panică(eroare)
}
amâna f. Închide()err = pprof. StartCPUProfile (f)
dacă greș!= zero {
panică(eroare)
}
amâna pprof. StopCPUProfile()
// codul de profilat
}
The principal funcția creează un fișier și închide fluxul de fișiere cu a amâna declarația și Închide funcția instanței fișierului. The StartCPUProfile funcția pornește un profil CPU și scrie datele în fișier, iar StopCPUProfile închide fluxul de profil cu a amâna afirmație. După pornirea și oprirea profilului CPU, puteți trece la scrierea codului pe care doriți să îl analizați.
Iată rezultatul rulării pprof comanda cu fișierul de profil din program:
Rularea pprof comanda cu un fișier pornește un shell interactiv care vă permite să explorați datele de profilare. Puteți folosi comenzi precum top și listă pentru a vizualiza funcțiile care durează cel mai mult timp pentru a fi executate.
Profilare memorie în Go
Profilarea memoriei este o tehnică folosită pentru a identifica pierderile de memorie și utilizarea costisitoare a memoriei în cod, prin măsurarea utilizării memoriei a funcțiilor din cod.
Puteți începe un profil de memorie cu WriteHeapProfile funcţie. The WriteHeapProfile funcția preia instanța fișierului și scrie datele profilului în fișier.
import (
"os"
"runtime/pprof"
)funcprincipal() {
f, err := os. Crea("mem_profile.prof")
dacă greș!= zero {
panică(eroare)
}
amâna f. Închide()err = pprof. WriteHeapProfile (f)
dacă greș!= zero {
panică(eroare)
}
// codul de profilat
}
The principal funcția creează un fișier de profilare și WriteHeapProfile funcția preia instanța fișierului ca argument și returnează un tip de eroare de scriere după scrierea în fișier. Poți mai departe gestionați eroarea conform cerințelor dvs.
Blocați profilarea cu Go
Blocarea profilului măsoară timpul de așteptare al unui program pentru primitivele de sincronizare, cum ar fi mutexurile și canalele. Blocarea profilului este utilă pentru identificarea părților codului care pot provoca blocarea.
The Priveşte în sus funcția returnează profilul cu numele unui șir specificat și Scrie la funcția de Priveşte în sus funcția scrie un instantaneu formatat pprof a profilului în fișier.
Iată cum puteți implementa profilarea blocurilor pentru programele dvs. Go:
import (
"os"
"runtime/pprof"
)funcprincipal() {
f, err := os. Crea(„block_profile.prof”)
dacă greș!= zero {
panică(eroare)
}
amâna f. Închide()err = pprof. Priveşte în sus("bloc").WriteTo (f, 0)
dacă greș!= zero {
panică(eroare)
}
// codul de profilat
}
Programul creează un fișier pentru stocarea datelor profilului blocului, caută blocuri cu Priveşte în sus funcția și scrie datele profilului blocului în fișier.
Urmărirea profilului cu Go
Profilul de urmărire este o tehnică de măsurare a execuției unui program, inclusiv programarea goroutinei și apelurile de sistem. Profilul de urmărire este util pentru identificarea blocajelor de performanță și înțelegerea interacțiunilor dintre diferitele părți ale programului.
The urmă pachetul oferă funcții pentru profilarea urmărilor. Acest pachet este, de asemenea, o parte din timpul de rulare pachet.
import (
"os"
"runtime/trace"
)funcprincipal() {
f, err := os. Crea("trace.out")
dacă greș!= zero {
panică(eroare)
}
amâna f. Închide()err = urma. Început (f)
dacă greș!= zero {
panică(eroare)
}
amâna urmă. Stop()
// codul de profilat
}
Programul creează un fișier de urmărire pentru a stoca datele de urmărire, pornește urmăritorul cu start funcție care preia instanța fișierului și returnează un tip de eroare și amână urmăritorul cu Stop funcţie.
Go oferă, de asemenea, instrumente pentru formatarea codului sursă. Pe lângă instrumentele de profilare, puteți utiliza instrumentele de formatare pentru a menține standardele de cod. The gofmt instrumentul este un instrument de formatare încorporat pe care îl puteți utiliza pentru a formata codul sursă Go pe baza regulilor specificate pentru pachetele dvs.