Функция pprof.WriteHeapProfile
Функция pprof.WriteHeapProfile записывает профиль
выделения памяти (heap profile) в переданный
io.Writer. Она принимает один аргумент -
писатель, в который будет сохранен профиль в формате,
понятном для утилит go tool pprof. Эта функция
полезна для сохранения снимка состояния памяти в
определенный момент выполнения программы.
Синтаксис
pprof.WriteHeapProfile(w io.Writer) error
Пример простого использования
Давайте запишем профиль кучи в файл heap.prof:
package main
import (
"os"
"runtime/pprof"
)
func main() {
f, err := os.Create("heap.prof")
if err != nil {
panic(err)
}
defer f.Close()
err = pprof.WriteHeapProfile(f)
if err != nil {
panic(err)
}
}
После выполнения кода в текущей директории появится файл
heap.prof с профилем памяти.
Пример с выделением памяти
Давайте создадим нагрузку на память и запишем профиль:
package main
import (
"fmt"
"os"
"runtime/pprof"
)
func main() {
// Выделяем память
slice := make([]int, 1000000)
for i := range slice {
slice[i] = i
}
fmt.Println("Memory allocated")
// Записываем профиль
f, err := os.Create("heap.prof")
if err != nil {
panic(err)
}
defer f.Close()
err = pprof.WriteHeapProfile(f)
if err != nil {
panic(err)
}
fmt.Println("Heap profile written")
}
Результат выполнения кода:
"Memory allocated"
"Heap profile written"
Пример с использованием bytes.Buffer
Давайте запишем профиль в буфер памяти вместо файла:
package main
import (
"bytes"
"fmt"
"runtime/pprof"
)
func main() {
buf := &bytes.Buffer{}
err := pprof.WriteHeapProfile(buf)
if err != nil {
panic(err)
}
fmt.Printf("Profile size: %d bytes\n", buf.Len())
}
Результат выполнения кода:
"Profile size: 1234 bytes"
Пример с обработкой ошибок
Давайте корректно обработаем возможные ошибки записи:
package main
import (
"fmt"
"os"
"runtime/pprof"
)
func main() {
f, err := os.Create("heap.prof")
if err != nil {
fmt.Printf("Failed to create file: %v\n", err)
return
}
defer f.Close()
if err := pprof.WriteHeapProfile(f); err != nil {
fmt.Printf("Failed to write heap profile: %v\n", err)
return
}
fmt.Println("Heap profile written successfully")
}
Результат выполнения кода:
"Heap profile written successfully"
Смотрите также
-
функцию
pprof.StartCPUProfile,
которая начинает запись CPU профиля -
функцию
pprof.StopCPUProfile,
которая останавливает запись CPU профиля -
функцию
pprof.Lookup,
которая возвращает профиль по имени -
пакет
net/http/pprof,
который предоставляет HTTP интерфейс для профилирования