DevGang
Авторизоваться

Как профилировать gRPC-сервер Golang с помощью pprof 

Фото chuttersnap на Unsplash
Фото chuttersnap на Unsplash

Профилирование с целью повышения производительности серверов лучше, стало важной частью разработки программного обеспечения. В этой части обсуждается профилирование сервера 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.

Источник:

#Golang
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу