Sobes.tech
Middle

Как да вградите стандартния профайлер във вашето приложение на Go?

sobes.tech AI

Отговор от AI

Пакетът net/http/pprof предоставя HTTP обработващи за данни за профилиране.

Импортирайте го:

import (
	"net/http"
	_ "net/http/pprof" // Важно е да се използва '_' за инициализация с страничен ефект
)

Стартирайте HTTP сървър в отделна горутина:

go func() {
	// Стартирайте сървъра на локалния адрес и стандартния порт за pprof
	if err := http.ListenAndServe("localhost:6060", nil); err != nil {
		// Обработка на грешка при стартиране, например логване
		// log.Printf("pprof сървърът неуспешен: %v", err)
	}
}()

Сега можете да получите достъп до данните за профилиране на адрес http://localhost:6060/debug/pprof/.

Основни налични крайни точки:

  • /debug/pprof/: Главната страница с списък на наличните профили.
  • /debug/pprof/heap: Профил на купчината.
  • /debug/pprof/goroutine: Профил на активните горутини.
  • /debug/pprof/block: Профил на блокировките.
  • /debug/pprof/threadcreate: Профил на създаването на нишки на ОС.
  • /debug/pprof/cmdline: Командният ред на приложението.
  • /debug/pprof/profile: CPU профил (по подразбиране събира данни за 30 секунди).
  • /debug/pprof/trace: Профил на трасировка на изпълнението (по подразбиране събира данни за 1 секунда).

За анализ на CPU, купчината и блокировките обикновено се използва инструментът go tool pprof:

go tool pprof http://localhost:6060/debug/pprof/profile # CPU профил за 30 секунди
go tool pprof http://localhost:6060/debug/pprof/heap # Профил на купчината

За анализ на трасировката се използва инструментът go tool trace:

go tool trace http://localhost:6060/debug/pprof/trace

Важно: Помнете за сигурността и не отваряйте порт с pprof публично без авторизация в продукция.