Среда разработки для профессиональной разработки на Go
GoLand
Профилировщик GoLand теперь работает с AI-агентами
В нашем практическом руководстве по профилированию в Go мы упоминали, что некоторые знакомые нам разработчики на Go избегают pprof, если это возможно. Для многих из них типичные сервисы на Go работают достаточно хорошо и без оптимизаций, поэтому, когда им все же требуется профилирование, это может восприниматься как «спасательная операция» с инструментом, в котором они не имеют достаточного опыта. Им приходится вспоминать, какой именно профиль нужно снять и как его собрать, а затем разбираться с огромным объемом низкоуровневых данных.
В GoLand 2026.1.2 процесс сбора данных стал проще благодаря встроенному профилировщику. В GoLand 2026.3 мы делаем следующий шаг — теперь этот профилировщик может использовать и ваш AI-агент. Вы описываете симптом, например: «Переиндексация через POST /reindex занимает намного больше времени, чем должна, сделай профилирование», и агент запускает ваше приложение с профилировщиком, выбирает подходящие под проблему профили, читает результаты и указывает на код, который за это отвечает. Вам больше не нужно знать, что такое профиль мьютексов или какие флаги pprof передавать.
Это работает с Claude Code, Codex и Junie благодаря поставляемому в комплекте навыку goland-profiler и набору инструментов MCP. Ниже мы подробнее рассмотрим, что делает агент и как вы можете разделить с ним работу.
Что происходит, когда вы просите агента профилировать приложение?
Навык goland-profiler подсказывает агенту, когда следует задействовать профилировщик, например при медленном выполнении, высокой нагрузке на CPU, избыточных аллокациях, росте потребления памяти, блокировках, состязании за блокировки или утечках горутин. Он также объясняет, как работать с инструментами MCP, которые предоставляют агенту доступ к профилировщику GoLand. Типичный сценарий работы выглядит следующим образом:
- Запуск с профилировщиком: Если вы уже запустили приложение с профилировщиком, агент использует этот запуск повторно. В противном случае он запускает приложение с профилировщиком, используя вашу конфигурацию запуска, точно так же, как если бы вы нажали кнопку Run with Profiler. Навык прямо предписывает агенту не добавлять net/http/pprof или какой-либо временный код профилирования, поэтому ваш исходный код остается неизменным. Если неясно, выполняет ли приложение то, что должно, агент также может прочитать его вывод.
- Выбор профиля: Навык инструктирует агента делать наиболее узкий снимок, который отвечает на поставленный вопрос. Для проблем с CPU это означает запись во время выполнения рабочей нагрузки (например, генератора нагрузки) или снятие профиля по таймеру, если нагрузка стабильна. Для других проблем он снимает профиль блокировок для ожиданий синхронизации, профиль мьютексов для состязания за блокировки или два профиля кучи (heap) для сравнения, если память продолжает расти. Также доступны профили аллокаций (allocs), горутин и утечек горутин.
- Чтение результатов: Каждый снимок возвращает сводку по пяти самым ресурсоемким функциям в вашем коде, показывая, куда уходят ресурсы, какие строки обходятся дороже всего и как к ним осуществляется доступ. Агент начинает с этой сводки и запрашивает больше деталей (например, топ функций под определенным корнем, пути вызовов к функции или самые дорогие строки в функции) только тогда, когда сводки недостаточно.
- Отчет о результатах: Агент сообщает вам, в чем заключается основная узкая места и во сколько она обходится, какой путь вызовов в вашем коде к ней приводит, где находятся «горячие» строки и является ли проблема нагрузкой на CPU, аллокациями, блокировками, состязанием или ростом числа горутин. Он также предлагает исправление или дальнейшее измерение, причем ему поручено разделять то, что показывает профиль, и его собственные гипотезы. Если вы попросите, он может и внести изменения.
Каждый профиль, записанный агентом, попадает в сеанс профилировщика и в раздел Recent profiles в окне инструмента Go Optimization, точно так же, как и профили, записанные вами самостоятельно. Если вы хотите перепроверить выводы агента, вы можете открыть тот же профиль и изучить график flame graph.
Инструменты MCP
Что агент может делать с профилировщиком GoLand
Запуск приложения с профилировщиком
Запускает и останавливает ваше приложение с профилировщиком точно так же, как кнопка Run with Profiler. Ваш исходный код не изменяется.
run_with_profiler
Запускает конфигурацию запуска с включенным профилировщиком.
list_profiled_runs
Выводит список активных и недавно остановленных профилированных запусков, включая те, которые вы запустили из IDE.
get_profiled_run_output
Возвращает вывод программы для профилированного запуска, например логи приложения.
stop_profiled_run
Останавливает профилированное приложение.
Снятие профилей
Сохраняет снятые профили в сеанс и в Recent profiles, чтобы вы могли открыть их в GoLand позже.
take_profile
Снимает профиль (снимок или профиль CPU за заданную длительность) и возвращает его со сводкой.
start_cpu_recording
Запускает запись CPU.
stop_cpu_recording
Останавливает запись, сохраняет профиль CPU и возвращает сводку.
Чтение профилей
Работает с любым профилем: снятым агентом, снятым вами или открытым в данный момент в редакторе.
list_profiles
Выводит список сеансовых, недавних и открытых в данный момент профилей.
profile_summary
Возвращает итоговые показатели и топ-5 функций с их «горячими» строками и путями вызовов для любого сохраненного профиля.
profile_top_frames
Располагает функции в порядке убывания собственных или кумулятивных затрат, аналогично pprof -top.
profile_call_paths
Показывает пути вызовов, ведущие к заданной функции.
profile_source_lines
Располагает строки исходного кода функции по стоимости, аналогично pprof -list.
Как разделить работу с агентом
То, какую часть процесса вы передаете агенту, зависит только от вас. Вот три варианта настройки, которые мы нашли наиболее полезными:
- Агент делает все: Вы описываете проблему, а агент берет на себя все остальное — от запуска приложения до объяснения результатов. Это хороший вариант, когда вы не знаете, с чего начать.
- Вы профилируете, агент анализирует: Вы сами запускаете профилировщик, открываете профиль и спрашиваете агента, что он в нем видит. Агент может прочитать профиль, открытый в данный момент, поэтому ничего не нужно экспортировать или описывать.
- Вы запускаете приложение, агент выполняет съемку: Вы запускаете приложение с профилировщиком и доводите его до нужного состояния (например, после прогрева или с загруженным производственным набором данных), а затем просите агента снять профили.
Рабочие процессы
Три способа разделения работы с агентом
Агент делает все
Полезно, когда вы знаете, что что-то работает медленно, но не имеете ни малейшего понятия, с чего начать.
1 Вы
«Переиндексация через POST /reindex занимает намного больше времени, чем должна. Профилируй приложение и скажи почему».
2 Агент
Загружает goland-profiler, выбирает конфигурацию запуска и вызывает run_with_profiler.
Ваш код остается без изменений.
3 Агент
Создает некоторую нагрузку на приложение, записывает данные CPU с помощью start_cpu_recording и stop_cpu_recording, а также снимает профиль кучи или аллокаций, если симптомы указывают на память.
Каждый снимок возвращает сводку с самыми «горячими» функциями и путями вызовов.
4 Агент
Если сводки недостаточно, углубляется в анализ с помощью profile_top_frames, profile_call_paths или profile_source_lines, после чего останавливает запущенное приложение.
5 Агент
Объясняет, что работает медленно и почему, и может исправить это, если вы попросите.
Профили остаются в GoLand, так что вы можете открыть их и проверить.
Вы профилируете, агент анализирует
Вы сохраняете контроль над запуском, а агент помогает вам разобраться с уже открытым профилем.
1 Вы
Запустите приложение с профилировщиком, воспроизведите медленный запрос и снимите профиль обычным способом.
2 Вы
Откройте профиль. Что-то на графе вызовов (flame graph) выглядит странно, но вы пока не понимаете, что именно.
3 Вы
«Посмотри на открытый профиль. Почему мы выделяем так много памяти?»
4 Агент
Находит открытый профиль с помощью list_profiles, читает его через profile_summary и углубляется с помощью profile_top_frames, profile_call_paths или profile_source_lines, если сводки недостаточно.
Он читает тот же профиль, на который смотрите вы.
5 Агент
Объясняет горячий путь в контексте вашего кода и предлагает исправление.
Вы запускаете приложение, агент выполняет захват
Вы запускаете приложение с профилировщиком и доводите его до нужного состояния, а дальше в дело вступает агент.
1 Вы
Запустите приложение с профилировщиком и переведите его в нужное состояние, например, после прогрева или с загруженным набором данных, близким к производственному.
2 Вы
«Приложение сейчас работает с профилировщиком. Захвати профили горутин и мьютексов и скажи, где возникает состязательность (контеншен).»
3 Агент
Находит ваш запуск с помощью list_profiled_runs, а затем вызывает take_profile для каждого типа профиля.
4 Агент
Читает профили, сопоставляет их с исходным кодом и отчитывается о результатах.
Приложение продолжает работать, пока вы его не остановите.
Текущие ограничения
- Приложение, запущенное из GoLand: профилировщик GoLand изменяет исполняемый файл во время компиляции, чтобы предоставить API профилирования, поэтому его нельзя подключить к уже запущенному процессу. Агент либо запускает приложение через конфигурацию запуска с профилировщиком, либо работает с сеансом, который вы запустили самостоятельно.
- Короткоживущие программы: профилировщик выполняет сэмплирование работающего процесса, поэтому инструмент командной строки, который завершается за долю секунды, не оставляет достаточно времени для захвата чего-либо полезного. Этот навык лучше всего подходит для серверов, воркеров и других долгоиграющих служб.
- Протестированные агенты: мы протестировали этот рабочий процесс с Claude Code, Codex и Junie. Другие агенты, способные подключаться к MCP-серверу GoLand, тоже могут работать, но мы их пока не проверяли.
Как попробовать
- Обновитесь до GoLand 2026.3 и откройте свой проект.
- Убедитесь, что goland-profiler включен в разделе Настройки | ИИ | Навыки (Settings | AI | Skills). Там же вы можете ограничить его использование определенными проектами или отключить его.
- Попросите агента проанализировать ваше приложение либо откройте уже сохраненный профиль и спросите агента, что он в нем видит.
Поделитесь своим мнением
Мы надеемся, что это сделает профилирование привычной частью вашей повседневной работы, а не только экстренной мерой, когда сервис уже испытывает проблемы. Если раньше вы избегали профилировщика, возможно, сейчас самое время попробовать его в деле.
Мы будем рады узнать, как это работает у вас: какую настройку вы в итоге используете, достаточно ли сводок агента или вам все равно приходится открывать граф вызовов, и для каких проектов это решение не подходит. Не стесняйтесь отмечать нас в X, заглядывать в канал Slack или создавать тикеты в нашей системе отслеживания проблем YouTrack.
Приятного кодинга! Команда GoLand











