Sobes.tech
Senior

Чӣ тавр профайлерро дар Go пайваст кардан мумкин аст? Чӣ тавр профилҳоро гирифтан мумкин аст?

sobes.tech AI

Ҷавоб аз AI

Дар Go барои профилинг аз бастаи net/http/pprof ва runtime/pprof истифода мешавад.

Барои пайваст кардани профилер ба сервери HTTP, кифоя аст, ки онро ворид кунед:

import _ "net/http/pprof"

ва сервери HTTP-ро оғоз кунед, масалан:

import (
    "net/http"
    _ "net/http/pprof"
)

func main() {
    go func() {
        http.ListenAndServe(":6060", nil)
    }()
    // коди дигар дар барнома
}

Пас аз оғоз, профилиро бо дастрасӣ ба нуқтаҳои охирин гирифтан мумкин аст:

  • http://localhost:6060/debug/pprof/profile — профили CPU (аз пешфарз 30 сония)
  • http://localhost:6060/debug/pprof/heap — профили хотира
  • http://localhost:6060/debug/pprof/goroutine — ҳолати goroutine-ҳо

Барои сабт кардани профили CPU дар файл ба таври барномавӣ:

import (
    "os"
    "runtime/pprof"
)

func main() {
    f, _ := os.Create("cpu.prof")
    pprof.StartCPUProfile(f)
    defer pprof.StopCPUProfile()

    // коди профилиро кардан
}

Барои таҳлили профилҳо, фармони go tool pprof истифода мешавад.