Pull to refresh

Comments 11

Спасибо за статью. Тема, не то чтоб новая, но точно не на таком уровне погружения у меня. Поэтому спрошу "ламерский" вопрос - а в чем практическая ценность профилирования? Удивило замечание "в повседневных задачах". Если дебаг какой или оптимизация, могу представить, а какие еще бизнез задачи решаются?

оптимизация вполне может быть бизнес-задачей. ну и для меня например такая задача определенно не является задачей каждого дня, но возникает достаточно регулярно, чтобы озадачится некоторым инструментарием для неё.

Выше уже ответили — различные оптимизации. Мне часто приходится решать задачи улучшения производительности в довольно большой кодовой базе, и там с ходу не понятно куда надо нанести «удар кувалдой».

Ну вот, например, я годами плевался от производительности анализа Heap Dump'ов в VisualVM - даже для сравнительно небольших дампов размером в 8-11 GB приходилось ждать подсчёта Retained Sizes порядка 10 часов. Соответственно, когда нужно просмотреть не один дамп, а множество, процесс растягивался на дни.
Но недавно, наконец, решил попрофилировать и, оказалось, что причины тормозов там довольно тривиальны (в основном IO и работа с хэш-таблицами) и решаются без особых усилий. После небольших правок процесс ускорился до примерно часа. Если бы я заглянул в профайлер несколько лет назад, сэкономил бы себе кучу времени.
Уверен, есть множество приложений, которые можно было бы заметно ускорить, если бы хоть кто-нибудь не поленился и посмотрел бы в профайлер (вспоминаем долгие загрузки GTA Online из-за парсера JSON).

ИМХО, всё это профилирование - для ванильных примеров синтетических задач, поэтому и польза от этих инструментов сомнительна. В реальных приложениях приходится использовать трейсинг, либо обвешивать всё логами/декораторами, чтобы понять, а где собственно проседает твоя приложуха. Очень жаль, что у штатного профайлера нет опции "не въедаться в байт код, а дать информацию по верхам", т.е. дать отчёт о том, какие функции (моего кода, а байт кода) были вызваны, сколько раз, с какими параметрами, как долго они выполнялись итд. Это очень сильно помогло бы в оптимизации приложений.

Flamegraph диаграммы удобны под это дело. Может и для питона есть, не интересовался.

Для питона есть, в статье есть несколько ссылок, которые точно умеют - это austin, py-spy, pyinstrument.

Если вы говорите про трейсинг, то возможно вам будет интересно посмотреть на pyroscope, сам его я не использовал (у нас немного другое направление), но выглядит он интересно.

Также большинство указанных в статье инструментов (в разделе Другие инструменты) умеют подцепляться к запущенным приложениям и строить либо FlameGraph, либо выгружать данные в формате Google Trace Event.

А по поводу ванильных примеров - я применял austin на реальном большом десктопном приложении, применял с пользой. С неванильными примерами есть другая проблема - ниже об этом писали - это получающиеся большие логи, которые надо как то предобрабатывать.

Опишу свой опыт

Когда переходил в питон, попробовал профилировать инструментами based on [c]profile - точно был остин, что-то еще из плагинов для vscode, что-то из внешних инструментов пытающихся засунуть гигантский файл в браузер. И vscode и браузер отчаянно сопротивлялись вплоть до падения, или до реакции в несколько минут на каждый клик.

Какое-то время жил на профайлере VS (из плюсов для меня - относительно привычный вид a-la flame tree) - оно хотя бы работало, даже на многогигабайтных трейсах. Но MS остановили его развитие кажется на 3.9 питоне и новостей о продолжении не попадлось. Но есть ощущение что майки почему-то вообще на нормальную студию забили болт, что кмк невероятно странно.

Сейчас живу на line_profiler/kernprof. Не сказать, что предел мечтаний. Была надежда, что если натравить какойнибудь из гуи cvs - получится сравнивать выводы, но пока безрезультно, поэтому по старинке, глазками. Кстати надо будет снова посмотреть какие gui к нему есть, ну или еще разок потыкать в альтернативы

Попробуйте что-то на основе flamegraph, он вроде как должен существенно снижать размер профиля (но у меня все равно получались профили по несколько Гб с примерно таким же результатом как у вас). У того же остина довольно простой формат, котороый можно фильтровать перед анализом "глазками".

Sign up to leave a comment.

Articles