Материал проходит вычитку — возможны неточности.
Урок 27 из 118

pprof: профиль сервера

Бенчмарк отвечал за одну функцию, а тормозил весь сервер. Миша подключил pprof к «Полке» и снял профили с живого процесса, не трогая код; Сергей напомнил, что профили раскрывают стеки и имена функций.

Главная мысль

профилирование встроено в стандартную библиотеку: пустой импорт net/http/pprof вешает на сервер страницу профилей, а снять CPU- или heap-профиль можно без изменения кода.

Подключение

import (
    "net/http"
    _ "net/http/pprof"
)

Пустой импорт регистрирует обработчики на дефолтном мультиплексоре. После этого на /debug/pprof/ доступен список профилей: goroutine, heap, allocs, threadcreate, block, mutex и другие. Два главных — CPU и heap.

Снять профиль

$ go tool pprof http://localhost:8080/debug/pprof/profile?seconds=30
$ go tool pprof http://localhost:8080/debug/pprof/heap

CPU-профиль: профилировщик 30 секунд сэмплирует, в какой функции сейчас каждая горутина, и отдаёт профиль. Heap — снимок кучи на момент запроса. Профили блока и мьютекса по умолчанию пустые — их включают заранее через runtime.SetBlockProfileRate и runtime.SetMutexProfileFraction.

Профиль как инструмент

Профиль отвечает на вопрос «где горит» без гадания: выросла задержка — CPU-профиль; растёт память — heap. Профиль всегда показывает, что реально происходит, а не что ты думаешь про свой код — поэтому профилируют до оптимизации, а не после. Помни про приватность: /debug/pprof раскрывает стеки, аллокации и имена функций — не выставляй его публично, вешай на localhost или закрывай авторизацией.

В следующем уроке

Вы узнаете:

  • как включить block и mutex-профили
  • как защитить /debug/pprof
  • как снять pprof-профиль в CI на нагрузочном тесте
Задание · вопросы

Проверьте себя

Вопрос 1 из 3

Как подключить профилирование к серверу без правки кода?

Вопрос 2 из 3

Почему block/mutex-профили по умолчанию пусты?

Вопрос 3 из 3

Можно ли выставлять /debug/pprof публично?

Итоги

net/http/pprof — профили на живом сервере без правки кода: CPU-профиль сэмплируется, heap — снимок. Блок и мьютекс включаются заранее.

Наш сайт собирает куки. Чтобы тебе было удобнее им пользоваться. Нажимая на кнопку, ты даёшь разрешение собирать куки