РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
986 of 1593 menu

Функция 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 интерфейс для профилирования
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить