Как профилировать gRPC-сервер Golang с помощью pprof
Профилирование с целью повышения производительности серверов лучше, стало важной частью разработки программного обеспечения. В этой части обсуждается профилирование сервера gRPC в Golang с помощью инструмента pprof. Если у вас нет предварительных знаний о Golang или gRPC-сервере, ознакомьтесь с ними, прежде чем читать эту статью.
Что такое pprof?
Прежде чем углубляться в детали того, как использовать pprof, давайте познакомимся с ним. Вот их собственное определение с их сайта:
pprof - это инструмент для визуализации и анализа данных профилирования. pprof собирает данные для генерации отчета, который можно использовать для визуализации и анализа данных. Он генерирует текстовые, а также графические отчеты.
Анализ этих отчетов может помочь вам обнаружить медленные функции в коде. Как только мы узнаем о трудоемких компонентах системы, мы можем оптимизировать их, чтобы повысить общую производительность.
Давайте сначала посмотрим на установку, затем на изменения, которые необходимо внести в код, затем мы научимся генерировать отчет и проверять его.
Установка
Чтобы установить и собрать его, мы будем использовать инструмент go get
:
go get -u github.com/google/pprof
Интеграция кода
После того, как вы настроили свой сервер gRPC, добавьте этот импорт в ваш основной файл сервера gRPC:
import(
"runtime"
"net/http"
_ "net/http/pprof"
)
Затем запустите новый HTTP-сервер вместе с сервером gRPC:
go func() {
http.ListenAndServe(":{http_port}", nil)
}()
В этом примере мы используем порт 8024.
Наконец, добавьте следующую строку вверху главной функции, чтобы получить место, где блокирующиеся программы ожидают примитивы синхронизации:
runtime.SetBlockProfileRate(1)
Вот и все - интеграция кода завершена!
Профилирование Сервиса
Запустите сервер gRPC и используйте клиент gRPC для выполнения некоторых запросов. Как только сервер gRPC получает запросы, выполните эту команду, чтобы сгенерировать отчет о вашем коде:
go tool pprof http://localhost:{http_port}/debug/pprof/profile\?seconds\=10
Мы используем десять секунд серверного времени. В http_port
, с которого мы запускаем HTTP-сервер. В нашем случае это будет 8024. Как только эта команда будет завершена, будет создан файл .pb.gz
, и местоположение файла отобразится на терминале.
Расположение по умолчанию: /Users/{username}/pprof/
После того, как отчет сгенерирован, вы можете использовать инструмент pprof
для его визуализации в веб-браузере. Чтобы запустить визуализацию, выполните следующую команду:
pprof -http=localhost:{report_port} {server_binary} {file_path}.pb.gz
Примечание: report_port
должен отличаться от нашего порта сервера Http и gRPC, так как он уже используется.
Теперь вы можете открыть свой браузер и перейти по этому адресу:
http://localhost:{report_port}/ui/
Вы можете просматривать различные графики и видеть, какие части кода занимают больше времени на обработку. Ниже приведены два типа графиков, которые могут быть наиболее удобными:
Вывод
С помощью всего лишь нескольких строк кода вы можете получить полезный анализ вашего сервера. Удачной оптимизации!
Вы можете найти весь пример кода из этой части на Github.