"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como você usa o pprof para traçar o perfil do número de goroutines em seu programa Go?

Como você usa o pprof para traçar o perfil do número de goroutines em seu programa Go?

Publicado em 2024-11-06
Navegar:839

How do you use pprof to profile the number of goroutines in your Go program?

Criando perfil do número de goroutines com pprof

A detecção de possíveis vazamentos de goroutines em seu programa Go requer o monitoramento do número de goroutines ativas ao longo do tempo. Embora o comando pprof da ferramenta go padrão forneça informações sobre o bloqueio, ele não aborda diretamente a contagem de goroutines.

Para criar um perfil eficaz do número de goroutines, abra http://localhost:8888/debug/pprof/ em seu navegador . Isso apresenta dois links relevantes:

  • Goroutine: http://localhost:8888/debug/pprof/goroutine?debug=1
  • Full Goroutine Stack Dump: http://localhost:8888/debug/pprof/goroutine?debug=2

O link Goroutine exibe goroutines compartilhando o mesmo código que single entradas, juntamente com sua contagem. Por exemplo:

1 @ 0x42f223 0x42f2e4 0x40542f 0x404f4b 0x4a0586 0x4600a1
#   0x4a0586    gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).startWorkers 0x56   /home/me/go/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:164

1 @ 0x42f223 0x43dfd7 0x43d532 0x4a04ed 0x4600a1
#   0x4a04ed    gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).processRunners 0x45d    /home/me/go/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:147

O número 1 antes do @ indica uma instância de cada goroutine.

O Full Goroutine Stack Dump é particularmente útil para vazamentos detecção. Ele lista cada goroutine individualmente, incluindo seu rastreamento de pilha e status de atividade:

goroutine 49 [chan receive, 2 minutes]:
gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).startWorkers(0xc820103ee0, 0xc820274000, 0xc820274060, 0xc8201d65a0)
    /home/me/go/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:164  0x56
created by gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).Run
    /home/me/go/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:294  0x41b

goroutine 50 [select]:
gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).processRunners(0xc820103ee0, 0x0, 0xc820274060, 0xc8201d65a0)
    /home/me/go/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:147  0x45d
created by gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).startWorkers
    /home/me/go/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:165  0x96

Ao utilizar esses endpoints pprof, você pode monitorar efetivamente o número de goroutines em seu programa, auxiliando na detecção e resolução de possíveis vazamentos de goroutines.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3