Этот инструмент находится в стадии разработки. Это еще не полностью готово к производству, но вы можете попробовать это.
Perfguard - это статический анализатор Go с акцентом на производительность.
Он поддерживает два режима пробега:
perfguard lint находит потенциальные проблемы, такие как традиционный статический анализperfguard optimize использует профили процессора для повышения точности анализаКлючевые особенности перфурада:
perfguard optimize--fix Fix (QuickFixes)(*) Это не пытается загружать цели анализа в память одновременно.
Вот несколько примеров того, что он может сделать для вас:
Установите двоичный файл perfguard под ваш $(go env GOPATH)/bin :
$ go install -v github.com/quasilyte/go-perfguard/cmd/perfguard@latestРекомендуется собирать профили ЦП на реалистичных рабочих процессах.
Для недолгого приложения CLI это может быть полным пробежком. Для длительного приложения вы можете включить профилирование в течение минуты или более, а затем сохранить его в файл.
Профили, которые получены из контрольных показателей, не являются репрезентативными и могут привести к неоптимальным результатам.
Горячие точки в профиле могут появиться в трех основных местах:
Оптимизация вашего собственного кода проста. Запустите Perfguard в корне вашего проекта:
$ perfguard optimize --heatmap cpu.out ./... Это будет предлагать только исправления в (2) категории.
Чтобы оптимизировать код из (3) у нас есть несколько вариантов.
Первый вариант предпочтительнее. Вы можете использовать тот же профиль процессора для оптимизации библиотеки. Запустите Perfguard в корнете исходного кода библиотеки, как вы сделали с вашим приложением.
Второй вариант может работать для случаев, когда вы хотите развернуть оптимизированный двоичный файл, не имея способа исправить зависимости, используя первый вариант. Следуйте этим шагам:
# Make dependencies easily available for perfguard.
$ go mod vendor
# Run the analysis over the vendor.
# We use --fix argument to immediately apply the suggested changes.
$ perfguard optimize --heatmap cpu.out --fix ./vendor/...
# Build the optimized binary.
$ go build -o bin/app ./cmd/myapp Затем вы можете вернуть изменения в ./vendor или удалить их, если вы не используете продавцы.