πŸ’¬ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ pprof ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Go?



πŸ“Œ pprof β€” это инструмСнт для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, встроСнный Π² экосистСму Go. Он ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π² ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΡƒΠ·ΠΊΠΈΡ… мСст Π² ΠΊΠΎΠ΄Π΅ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ рСсурсы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ CPU ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ.



πŸ“Œ ИспользованиС pprof Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅:



1. Π˜ΠΌΠΏΠΎΡ€Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Π° pprof: испортируСм ΠΏΠ°ΠΊΠ΅Ρ‚ import _ "net/http/pprof", Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ автоматичСски Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Π° ΠΊ HTTP-сСрвСру.



2. Запуск HTTP сСрвСра: pprof ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ HTTP-сСрвСр для сбора ΠΈ прСдоставлСния Π΄Π°Π½Π½Ρ‹Ρ… профиля.



ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сСрвСр Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΏΠΎΡ€Ρ‚Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ:



go

go func() {

log.Println(http.ListenAndServe("localhost:6060", nil))

}()





Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ профилям Ρ‡Π΅Ρ€Π΅Π· http://localhost:6060/debug/pprof/.



3. Π‘Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… профиля: ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ CPU, памяти, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ…. НапримСр, для CPU-профиля:



go

f, err := os.Create("cpu.prof")

if err != nil {

log.Fatal(err)

}

pprof.StartCPUProfile(f)

defer pprof.StopCPUProfile()





Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ запускаСт сбор Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ CPU.



4. Анализ профиля: послС сбора Π΄Π°Π½Π½Ρ‹Ρ… профиля ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ инструмСнт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки go tool pprof для Π°Π½Π°Π»ΠΈΠ·Π° собранных Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр:



shell

go tool pprof cpu.prof





Π’ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ pprof ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈΡΠΊΠ°Ρ‚ΡŒ ΡƒΠ·ΠΊΠΈΠ΅ мСста, ΠΈ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ статистику Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².



5. Визуализация: pprof Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… профиля Π² Π²ΠΈΠ΄Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ². ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ pprof, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ web ΠΈΠ»ΠΈ svg, для создания графичСского прСдставлСния профиля.