Pagerinkite savo Go programų našumą naudodami profiliavimo techniką.
Profiliavimas yra metodas, dažniausiai naudojamas programinės įrangos kūrimo cikle analizuojant a našumą programa, paprastai skirta palyginti programas arba nustatyti kliūtis ir tobulinimo sritis programa. Profiliavimas apima įvairių metrikų, tokių kaip atminties naudojimas, procesoriaus panaudojimas, vykdymo laikas ir kita sistemos lygio statistika, matavimą ir analizę.
Profiliavimo tikslas – nustatyti programos dalis, sunaudojančias daugiausiai išteklių, kad ją būtų galima optimizuoti siekiant geresnio našumo. Profiliavimas taip pat gali padėti derinti, optimizuoti atminties valdymą ir derinti vienu metu.
Profiliavimas Go
„Go“ yra daugybė profiliavimo įrankių. Kai kurie populiarūs įrankiai apima „Go“ integruotą pprof profiliavimo įrankį ir populiarius trečiųjų šalių paketus, tokius kaip „Go Tool Trace“ ir „Go-Torch“ paketai.
The pprof paketas yra dalis vykdymo laikas paketą. The pprof paketas suteikia funkcionalumą, leidžiantį rašyti vykdymo laiko profiliavimo duomenis tokiais formatais
pprof vizualizacijos įrankis gali interpretuoti.Štai kaip galite importuoti pprof paketą į savo Go programas:
importuoti"pprof"
Go pateikia keletą komandų ir vėliavėlių dirbti su šaltinio kodu. Vykdykite toliau nurodytus veiksmus įrankis komandą, kad pasiektumėte profiliavimo rezultatus įvairiais formatais.
eik įrankis pprof
Komanda išveda išsamią naudojimo informaciją apie pprof komandą.
CPU profiliavimas Go
CPU profiliavimas matuoja laiką, kurį programa praleidžia vykdydama funkcijas. CPU profiliavimas yra naudingas norint nustatyti kodo dalis, kurios sunaudoja daugiausia procesoriaus laiko.
The pprof paketas suteikia funkcijas procesoriaus profiliams rinkti, procesoriaus profiliavimui pradėti ir sustabdyti bei profilio duomenų įrašymo į failus funkciją.
Štai kaip paleisti ir sustabdyti procesoriaus profilį ir įrašyti duomenis į profiliavimo failą:
importuoti (
"os"
"runtime/pprof"
)funcpagrindinis() {
f, klaida := os. Sukurti ("cpu_profilis.prof")
jeigu klysta! = nulis {
panika(klaida)
}
atidėti f. Uždaryti()err = pprof. StartCPUProfile (f)
jeigu klysta! = nulis {
panika(klaida)
}
atidėti pprof. Stop CPUProfile()
// kodas, kurį reikia profiliuoti
}
The pagrindinis funkcija sukuria failą ir uždaro failų srautą su a atidėti pareiškimas ir Uždaryti failo egzemplioriaus funkcija. The Pradėti CPUProfile funkcija paleidžia CPU profilį ir įrašo duomenis į failą, o Sustabdyti CPUProfile uždaro profilio srautą su a atidėti pareiškimas. Paleidę ir sustabdę CPU profilį, galite rašyti kodą, kurį norite analizuoti.
Štai paleidimo rezultatas pprof komanda su profilio failu iš programos:
Paleidžiant pprof komanda su failu paleidžia interaktyvų apvalkalą, leidžiantį tyrinėti profiliavimo duomenis. Galite naudoti tokias komandas kaip viršuje ir sąrašą norėdami peržiūrėti funkcijas, kurioms vykdyti reikia daugiausiai laiko.
Atminties profiliavimas Go
Atminties profiliavimas yra metodas, naudojamas nustatyti atminties nutekėjimą ir brangų atminties naudojimą kode, matuojant kodo funkcijų atminties naudojimą.
Atminties profilį galite pradėti naudodami WriteHeapProfile funkcija. The WriteHeapProfile funkcija paima failo egzempliorių ir įrašo profilio duomenis į failą.
importuoti (
"os"
"runtime/pprof"
)funcpagrindinis() {
f, klaida := os. Sukurti ("mem_profilis.prof")
jeigu klysta! = nulis {
panika(klaida)
}
atidėti f. Uždaryti()err = pprof. WriteHeapProfile (f)
jeigu klysta! = nulis {
panika(klaida)
}
// kodas, kurį reikia profiliuoti
}
The pagrindinis funkcija sukuria profiliavimo failą ir WriteHeapProfile funkcija paima failo egzempliorių kaip argumentą ir įrašius į failą grąžina rašymo klaidos tipą. Galite toliau ištaisykite klaidą pagal savo reikalavimus.
Blokuoti profiliavimą naudojant „Go“.
Blokų profiliavimas matuoja programos laukimo laiką iki sinchronizavimo primityvų, tokių kaip mutexes ir kanalai. Blokų profiliavimas yra naudingas nustatant kodo dalis, kurios gali sukelti blokavimą.
The Ieškoti funkcija grąžina profilį su nurodytos eilutės pavadinimu ir Parašyti funkcija Ieškoti funkcija į failą įrašo pprof formato momentinę profilio nuotrauką.
Štai kaip galite įdiegti blokinį profiliavimą savo Go programose:
importuoti (
"os"
"runtime/pprof"
)funcpagrindinis() {
f, klaida := os. Sukurti ("bloko_profilis.prof")
jeigu klysta! = nulis {
panika(klaida)
}
atidėti f. Uždaryti()err = pprof. Ieškoti ("blokuoti").Rašyti į (f, 0)
jeigu klysta! = nulis {
panika(klaida)
}
// kodas, kurį reikia profiliuoti
}
Programa sukuria failą bloko profilio duomenims saugoti, ieško blokų su Ieškoti funkcija ir įrašo bloko profilio duomenis į failą.
Trace Profiling With Go
Trace profiliavimas yra programos vykdymo matavimo metodas, įskaitant gorutininį planavimą ir sistemos iškvietimus. Trace profiliavimas yra naudingas norint nustatyti našumo kliūtis ir suprasti skirtingų programos dalių sąveiką.
The pėdsaką paketas suteikia pėdsakų profiliavimo funkcijas. Šis paketas taip pat yra dalis vykdymo laikas paketą.
importuoti (
"os"
"vykdymo laikas / sekimas"
)funcpagrindinis() {
f, klaida := os. Sukurti ("trace.out")
jeigu klysta! = nulis {
panika(klaida)
}
atidėti f. Uždaryti()err = pėdsakai. Pradėti (f)
jeigu klysta! = nulis {
panika(klaida)
}
atidėti pėdsaką. Sustabdyti()
// kodas, kurį reikia profiliuoti
}
Programa sukuria sekimo failą sekimo duomenims saugoti, paleidžia sekiklį su Pradėti funkcija, kuri paima failo egzempliorių ir grąžina klaidos tipą bei atideda sekiklį su Sustabdyti funkcija.
„Go“ taip pat teikia šaltinio kodo formatavimo įrankius. Kartu su profiliavimo įrankiais galite naudoti formatavimo įrankius, kad išlaikytumėte kodo standartus. The gofmt įrankis yra integruotas formatavimo įrankis, kurį galite naudoti norėdami formatuoti savo Go šaltinio kodą pagal nurodytas paketų taisykles.