Функция pprof.StartCPUProfile
Функция pprof.StartCPUProfile запускает профилирование CPU
и записывает данные в указанный io.Writer. Она принимает
один параметр - интерфейс io.Writer, в который будут
записываться данные профилирования. Профилирование продолжается
до вызова функции pprof.StopCPUProfile.
Данная функция часто используется в тестах и бенчмарках для
анализа производительности кода. После завершения профилирования
данные можно проанализировать с помощью команды
go tool pprof.
Важно помнить, что функция pprof.StartCPUProfile
паникует, если профилирование уже было запущено и не
остановлено. Для остановки профилирования используется
функция pprof.StopCPUProfile, которая записывает
оставшиеся данные и завершает профилирование.
Синтаксис
pprof.StartCPUProfile(w io.Writer)
Пример
Давайте запустим профилирование CPU для функции, выполняющей вычисления, и сохраним результат в файл:
package 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
}
}
Результат выполнения кода:
"CPU profile saved to cpu.prof"
Пример
Давайте запустим профилирование внутри тестовой функции и запишем данные в файл:
package 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)
}
}
Результат выполнения кода:
"PASS"
Пример
Давайте запустим профилирование для нескольких функций и сохраним результаты в разные файлы:
package 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()
}
Результат выполнения кода:
"CPU profile saved to cpu.prof"
Смотрите также
-
функцию
pprof.StopCPUProfile,
которая останавливает профилирование CPU -
функцию
pprof.WriteHeapProfile,
которая записывает профиль памяти в указанный файл -
функцию
pprof.Lookup,
которая возвращает профиль по имени -
пакет
runtime/pprof,
который предоставляет инструменты для профилирования