Функция pprof.StartCPUProfile

Функция pprof.StartCPUProfile запускает профилирование CPU и записывает данные в указанный io.Writer. Она принимает один параметр - интерфейс io.Writer, в который будут записываться данные профилирования. Профилирование продолжается до вызова функции pprof.StopCPUProfile.

Данная функция часто используется в тестах и бенчмарках для анализа производительности кода. После завершения профилирования данные можно проанализировать с помощью команды go tool pprof.

Важно помнить, что функция pprof.StartCPUProfile паникует, если профилирование уже было запущено и не остановлено. Для остановки профилирования используется функция pprof.StopCPUProfile, которая записывает оставшиеся данные и завершает профилирование.

Синтаксис

gopprof.StartCPUProfile(w io.Writer)

Пример

Давайте запустим профилирование CPU для функции, выполняющей вычисления, и сохраним результат в файл:

gopackage main

import (
  "os"
  "runtime/pprof"
)

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

  // Your code here
  sum := 0
  for i := 0; i < 1000000; i++ {
    sum += i
  }
}

Результат выполнения кода:

go"CPU profile saved to cpu.prof"

Пример

Давайте запустим профилирование внутри тестовой функции и запишем данные в файл:

gopackage main

import (
  "os"
  "runtime/pprof"
  "testing"
)

func TestProfiling(t *testing.T) {
  f, _ := os.Create("test_cpu.prof")
  pprof.StartCPUProfile(f)
  defer pprof.StopCPUProfile()

  result := 0
  for i := 0; i < 1000; i++ {
    result += i * i
  }

  if result != 332833500 {
    t.Errorf("Expected 332833500, got %d", result)
  }
}

Результат выполнения кода:

go"PASS"

Пример

Давайте запустим профилирование для нескольких функций и сохраним результаты в разные файлы:

gopackage main

import (
  "os"
  "runtime/pprof"
)

func slowFunction() {
  sum := 0
  for i := 0; i < 1000000; i++ {
    sum += i
  }
}

func fastFunction() {
  sum := 0
  for i := 0; i < 1000; i++ {
    sum += i
  }
}

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

  slowFunction()
  fastFunction()
}

Результат выполнения кода:

go"CPU profile saved to cpu.prof"

Смотрите также

  • функцию pprof.StopCPUProfile,
    которая останавливает профилирование CPU
  • функцию pprof.WriteHeapProfile,
    которая записывает профиль памяти в указанный файл
  • функцию pprof.Lookup,
    которая возвращает профиль по имени
  • пакет runtime/pprof,
    который предоставляет инструменты для профилирования