Как стать автором
Обновить

Создание кастомных Go-профилей с помощью pprof. Запоминаем стеки

Блог компании Badoo Тестирование IT-систем *Программирование *Отладка *Go *
Перевод

Кадр из сериала «Коломбо»

Go-шный пакет pprof часто используется для профилирования процессора или памяти, но не все знают о возможности создавать собственные кастомные профили. Они могут быть полезны для поиска утечек ресурсов или, например, для слежения за злоупотреблением какими-нибудь тяжелыми вызовами.
Читать дальше →
Всего голосов 43: ↑42 и ↓1 +41
Просмотры 4.6K
Комментарии 0

Простые методы оптимизации программ Go

Программирование *Проектирование и рефакторинг *Go *
Перевод
Я всегда забочусь о производительности. Точно не знаю, почему. Но меня просто бесят медленные сервисы и программы. Похоже, я не одинок.

В тестах A/B мы попытались замедлять выдачу страниц с шагом 100 миллисекунд и обнаружили, что даже очень небольшие задержки приводят к существенному падению доходов. — Грег Линден, Amazon.com

По опыту, низкая производительность проявляется одним из двух способов:

  • Операции, которые хорошо выполняются в небольших масштабах, становятся нежизнеспособными с ростом числа пользователей. Обычно это операции O(N) или O(N²). Когда база пользователей мала, всё работает отлично. Продукт спешат вывести на рынок. По мере роста базы возникает всё больше неожиданных патологических ситуаций — и сервис останавливается.
  • Много отдельных источников неоптимальной работы, «смерть от тысячи порезов».
Читать дальше →
Всего голосов 26: ↑23 и ↓3 +20
Просмотры 13K
Комментарии 10

Непрерывное профилирование в Go

Go *

pprof — основной инструмент профилирования в Go. Профилировщик включен в стандартную библиотеку Go и про него, за годы, написано уже очень много. Чтобы подключить pprof в существующее приложение нужно просто добавить одну строчку кода:


import _ “net/http/pprof”

В HTTP-сервере по-умолчанию — net/http.DefaultServeMux — по пути /debug/pprof/ будут зарегистрированы обработчики, отдающие результаты профилирования.


curl -o cpu-profile.pb.gz http://<server-addr>/debug/pprof/profile

(подробнее см. https://godoc.org/net/http/pprof)


Но по опыту, не всегда все так просто и на практике с использованием pprof в бою, есть подводные камни.

Читать дальше →
Всего голосов 22: ↑21 и ↓1 +20
Просмотры 6.4K
Комментарии 2

pprof в golang: Исправляем утечку памяти

Отладка *Go *

После весеннего "локдауна" (тогда у меня внезапно появилось время и xswitcher расписать и статью выпустить, да ещё и детей учить "на удалёнке"), моё время опять как-то всё быстро закончилось. Только сейчас, перед НГ получилось зачистить кое-какой тех. долг. И опять про golang (хотя я не сильно много на нём пишу).

"Зачистка" неожиданно заняла заметное время. Как оказалось, профилирование на go — не такая уж и разработанная тема. "Среднему" специалисту не так-то и просто найти подходящий материал. По такому случаю, нет повода не поделиться. Кому интересно максимально "прижатое" к задаче изложение (я старался), добро пожаловать под кат.

Читать далее
Всего голосов 10: ↑9 и ↓1 +8
Просмотры 6.4K
Комментарии 21

Микрооптимизация кода на Go на примере простого веб-сервиса

Блог компании «Лаборатория Касперского» Программирование *Go *


Привет, Хабр! Я работаю старшим Go-разработчиком в «Лаборатории Касперского». Сегодня хочу поговорить о том, как искать узкие места и оптимизировать код на Go. Разберу процесс профилирования и оптимизации на примере простого веб-сервиса — покажу, с помощью каких встроенных инструментов искать функции, активнее всего использующие CPU и память. Расскажу, какие можно применять подходы, чтобы повысить производительность. Хотя речь пойдет о микрооптимизации, в моем примере шаг за шагом производительность удалось поднять в 5 раз!

Читать дальше →
Всего голосов 33: ↑32 и ↓1 +31
Просмотры 12K
Комментарии 13

profile-guided поиск по коду

Высокая производительность *Open source *Программирование *Go *Управление разработкой *

Если объединить структурный поиск по коду через gogrep и фильтрацию результатов через perf-heatmap, то мы получим profile-guided поиск по коду.


Данная комбинация позволяет находить все совпадения по шаблону поиска, а затем показывает только те результаты, что лежат на "горячем" пути исполнения.


Через perf-heatmap также можно аннотировать файл с учётом того, насколько строка исходного кода "горячая".


Читать дальше →
Всего голосов 20: ↑18 и ↓2 +16
Просмотры 1.9K
Комментарии 0

Анализируем bound checks в Go по CPU профилю

Высокая производительность *Assembler *Системное программирование *Компиляторы *Go *

Сегодня мы будем анализировать бинарники на пару с CPU профилями, чтобы создать на их основе расширенные профили исполнения. Эти дополненные профили мы сможем использовать для оценки времени, которое программа тратит на проверки выхода за границу массивов и слайсов.


Читать дальше →
Всего голосов 26: ↑23 и ↓3 +20
Просмотры 3.8K
Комментарии 0

Разработка навыка для «Алисы» на основе Google Keep заметок

Open source *Google API *Go *Голосовые интерфейсы *
Из песочницы

На данный момент я активно пользуюсь приложением Google Keep для управления заметками на смартфоне. Для покупок в магазине достаточно удобно пользоваться заметками вида "чеклист", о которых и пойдет речь ниже.

Как правило для покупок в магазине используется один и тот же набор наименований. Если заполнить такой список, то в последующем при добавлении новых пунктов будут отображаться подсказки по уже добавленным, что достаточно удобно.

Казалось бы причем тут Алиса... так вот еще удобнее было бы добавлять такие пункты покупок в список, используя голосовой помощник от Яндекса.

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Просмотры 2.4K
Комментарии 6