Uzlabojiet savu Go programmu veiktspēju, izmantojot profilēšanas paņēmienu.

Profilēšana ir paņēmiens, ko parasti izmanto programmatūras izstrādes ciklā, lai analizētu a programmu, parasti programmu salīdzināšanai vai vājo vietu un uzlabošanas jomu noteikšanai a programma. Profilēšana ietver dažādu metriku, piemēram, atmiņas lietojuma, CPU izmantošanas, izpildes laika un citas sistēmas līmeņa statistikas mērīšanu un analīzi.

Profilēšanas mērķis ir identificēt programmas daļas, kas patērē visvairāk resursu, lai to varētu optimizēt labākai veiktspējai. Profilēšana var palīdzēt arī atkļūdošanā, atmiņas pārvaldības optimizēšanā un vienlaicīguma regulēšanā.

Profilēšana pakalpojumā Go

Programmā Go ir daudz rīku profilēšanai. Daži populāri rīki ietver Go iebūvēto pprof profilēšanas rīku un populāras trešo pušu pakotnes, piemēram, Go Tool Trace un Go-Torch pakotnes.

The pprof iepakojums ir daļa no izpildlaiks iepakojums. The pprof pakotne nodrošina funkcionalitāti izpildlaika profilēšanas datu rakstīšanai formātos, kas atbilst pprof vizualizācijas rīks var interpretēt.

Lūk, kā jūs varat importēt pprof pakotni savās Go programmās:

imports"pprof"

Go nodrošina vairākas komandas un karogus strādāt ar avota kodu. Palaidiet tālāk norādīto rīks komandu, lai piekļūtu profilēšanas rezultātiem dažādos formātos.

aiziet rīks pprof

Komanda izvada lietošanas informāciju par pprof komandu.

CPU profilēšana pakalpojumā Go

CPU profilēšana mēra laiku, ko programma pavada, izpildot funkcijas. CPU profilēšana ir noderīga, lai identificētu koda daļas, kas patērē visvairāk CPU laika.

The pprof pakotne nodrošina funkcijas CPU profilu apkopošanai, CPU profilēšanas sākšanai un apturēšanai, kā arī funkcija profila datu ierakstīšanai failos.

Tālāk ir norādīts, kā sākt un apturēt CPU profilu un ierakstīt datus profilēšanas failā.

imports (
"os"
"izpildlaiks/pprof"
)

funcgalvenais() {
f, err := os. Izveidot("cpu_profils.prof")
ja kļūda! = nulle {
panika(kļūda)
}
atlikt f. Aizvērt ()

err = pprof. StartCPUProfile (f)
ja kļūda! = nulle {
panika(kļūda)
}
atlikt pprof. StopCPUProfile()

// profilējamais kods
}

The galvenais funkcija izveido failu un aizver faila straumi ar a atlikt paziņojums un Aizvērt faila instances funkcija. The Sākt CPUProfile funkcija sāk CPU profilu un ieraksta datus failā, un StopCPUProfile aizver profila straumi ar a atlikt paziņojums, apgalvojums. Pēc CPU profila palaišanas un apturēšanas varat turpināt rakstīt analizējamo kodu.

Lūk, darbības rezultāts pprof komanda ar profila failu no programmas:

Palaižot pprof komanda ar failu sāk interaktīvu apvalku, kas ļauj izpētīt profilēšanas datus. Varat izmantot tādas komandas kā tops un sarakstu lai skatītu funkcijas, kuru izpildei nepieciešams visvairāk laika.

Atmiņas profilēšana pakalpojumā Go

Atmiņas profilēšana ir metode, ko izmanto, lai identificētu atmiņas noplūdes un dārgu atmiņas lietojumu kodā, mērot koda funkciju atmiņas lietojumu.

Atmiņas profilu var sākt ar WriteHeapProfile funkciju. The WriteHeapProfile funkcija uzņem faila gadījumu un ieraksta profila datus failā.

imports (
"os"
"izpildlaiks/pprof"
)

funcgalvenais() {
f, err := os. Izveidot("mem_profils.prof")
ja kļūda! = nulle {
panika(kļūda)
}
atlikt f. Aizvērt ()

err = pprof. WriteHeapProfile (f)
ja kļūda! = nulle {
panika(kļūda)
}

// profilējamais kods
}

The galvenais funkcija izveido profilēšanas failu un WriteHeapProfile funkcija izmanto faila gadījumu kā argumentu un pēc ierakstīšanas failā atgriež rakstīšanas kļūdas veidu. Jūs varat tālāk apstrādājiet kļūdu atbilstoši jūsu prasībām.

Bloķējiet profilēšanu, izmantojot Go

Bloku profilēšana mēra programmas gaidīšanas laiku sinhronizācijas primitīviem, piemēram, muteksiem un kanāliem. Bloku profilēšana ir noderīga, lai identificētu koda daļas, kas var izraisīt bloķēšanu.

The Meklēt funkcija atgriež profilu ar norādītās virknes nosaukumu un Rakstīt funkcija Meklēt funkcija ieraksta failā pprof formatētu profila momentuzņēmumu.

Tālāk ir norādīts, kā varat ieviest bloku profilēšanu savām Go programmām.

imports (
"os"
"izpildlaiks/pprof"
)

funcgalvenais() {
f, err := os. Izveidot("bloka_profils.prof")
ja kļūda! = nulle {
panika(kļūda)
}
atlikt f. Aizvērt ()

err = pprof. Meklēt ("bloķēt").WriteTo (f, 0)
ja kļūda! = nulle {
panika(kļūda)
}

// profilējamais kods
}

Programma izveido failu bloku profila datu glabāšanai, meklē blokus ar Meklēt funkciju un ieraksta bloka profila datus failā.

Trace Profiling With Go

Izsekošanas profilēšana ir paņēmiens programmas izpildes mērīšanai, tostarp gorutina plānošanai un sistēmas izsaukumiem. Izsekošanas profilēšana ir noderīga, lai noteiktu veiktspējas vājās vietas un izprastu mijiedarbību starp dažādām programmas daļām.

The izsekot pakotne nodrošina izsekošanas profilēšanas funkcijas. Šī pakete ir arī daļa no izpildlaiks iepakojums.

imports (
"os"
"izpildlaiks/izsekošana"
)

funcgalvenais() {
f, err := os. Izveidot("trace.out")
ja kļūda! = nulle {
panika(kļūda)
}
atlikt f. Aizvērt ()

err = izsekot. Sākt (f)
ja kļūda! = nulle {
panika(kļūda)
}
atlikt izsekot. Apstāties ()

// profilējamais kods
}

Programma izveido izsekošanas failu, lai saglabātu izsekošanas datus, un sāk izsekotāju ar Sākt funkcija, kas uzņem faila gadījumu un atgriež kļūdas veidu un atliek izsekotāju ar Stop funkciju.

Go nodrošina arī rīkus pirmkoda formatēšanai. Papildus profilēšanas rīkiem varat izmantot formatēšanas rīkus, lai uzturētu koda standartus. The gofmt rīks ir iebūvēts formatēšanas rīks, ko varat izmantot, lai formatētu savu Go avota kodu, pamatojoties uz noteiktiem pakotņu noteikumiem.