Все хотят знать, как выполняется их код. Многие догадываются, чем это можно измерить. И лишь немногие находят в себе силы продраться через результаты измерений. Проблема ещё более усложняется, если приложение исполняется в нескольких процессах, потоках или на разных серверах. Вал измерений захлестывает разработчика, и уже не видно конца...
В этом докладе мы попытаемся упростить все это с помощью визуализации, а именно — flame graph'ов, красивых и наглядных . Также вместе рассмотрим процесс сбора данных, их подготовку и на примерах поучимся читать получившиеся графики.
4. 10 лет профессионального программирования
Python, JavaScript, C/C++, Perl, Java, PHP
В Яндексе с 2014 года
Характер нордический, люблю поесть :)
4
О докладчике
7. Позволяет найти “узкие места” в вашем коде
Быстрее код - больше полезной работы за единицу времени
Хороший повод узнать, что же происходит “под капотом”
Отлично смотрится в резюме
7
Профилирование for fun & profit
8. Форма динамического анализа программы
Основной способ - замеры:
〉 CPU
〉 Потребляемая память
〉 Частота/продолжительность вызовов функций
Методы:
〉 Статистический профайлинг (сэмплирование)
〉 Инструментирование
8
Минутка информации
18. Метод визуализации собранных фреймов стека
Введены в обиход Бренданом Греггом (Brendan Gregg)
Помогают понять общую картину выполнения приложения
Работает с разными формата результатов (perf, DTrace и т.д.)
18
Flame graph
19. Каноничный формат вывода - SVG
Ось X - число появлений кадра стека среди всех семплов
Ось Y - глубина нахождения в стеке
Есть различные варианты: CPU (Off-CPU), память, IO и т.п.
19
Технические детали
25. Сбор данных через python-flamegraph
https://github.com/evanhempel/python-flamegraph
Сэмплирование отдельным потоком каждые 100 мс
Подключение в файле конфигурации gunicorn,
обработчики post_worker_init и worker_int
Результаты сбрасываются при получении SIGQUIT воркером
и объединяются
25
Case study: yandex-tinyurl
31. Свой набор инструментов для визуализации
Группы цветов для раскрашивания графика
Попробовать SystemTap / perf
“Full-stack flame graph”
31
Планы на будущее
35. “The Flame Graph”
http://cacm.acm.org/magazines/2016/6/202665-the-flame-graph
“FreeBSD 2014 Flame Graphs"
http://www.slideshare.net/brendangregg/freebsd-2014-flame-graphs
“Blazing Performance with Flame Graphs”
http://www.youtube.com/watch?v=nZfNehCzGdw
BIG DATA #9 «Анализ производительности Хадуп-кластера»
https://www.youtube.com/watch?v=Yh9KxQ3fKy0
35
Ссылки и дополнительные материалы