Непрерывное профилирование в ходе эксплуатации

advertisement
Deutsche Bank
Group Technology & Operations
Непрерывное профилирование
в ходе эксплуатации
для Java приложений
Алексей Рагозин
Deutsche Bank
Профилирование
даёт нам богатейший набор инструментов
•Широкий выбор профайлеров
•Диагностические интерфейсы
✓
инструментация
итд
Но есть небольшая проблема…
Deutsche Bank
Профилирование
Как воспроизвести проблему
в условиях эксперимента?
Нам нужно
•Реальное железо
•Реальные данные
•Реальная нагрузка
Deutsche Bank
Плюс, очень чёткое
понимание того что же
именно происходит
в ходе эксплуатации!
Что же всё-таки наше приложение
делает на самом деле?
Можно спросить
• нам не ответят соврут
Можно замерить
…
Deutsche Bank
Метрики
Deutsche Bank
Метрики
Замеряем / Агрегируем / Публикуем
•
•
•
•
•
…
Deutsche Bank
Метрики
Dev
Vs.
Ops
Deutsche Bank
Метрики
Мониторинг
Профилирование
Deutsche Bank
Телеметрия
Результаты прямых измерений
Не агрегированные
Пригодные для статистической обработки
Включая
•замеры специфические для приложения
•общее состояние системы ЦПУ сеть и т п
Данные обрабатываются ретроспективно
Deutsche Bank
Телеметрия
Big data?
▪ Текстовая строчка лога
байт
▪ Бинарно упакованная строчка
байт
✓ Сжимается в
▪
раза
миллионов событий в день это много
✓
в день
Deutsche Bank
Работа с данными
Время отклика
Deutsche Bank
Работа с данными
Частота запросов
Deutsche Bank
Работа с данными
Время отклика от частоты
Deutsche Bank
Работа с данными
Deutsche Bank
Threads:
16
Threads:
8
Threads:
4
Default stride size
Deutsche Bank
Stride: 4096
Threads:
16
Threads:
8
Threads:
4
Default stride size
Deutsche Bank
Stride: 4096
Работа с данными
Deutsche Bank
Работа с данными
•меньше 1000 строк
•пивот таблицы
• Интерактивная
работа с данными
•любые объёмы данных
•сложные расчёты
• предагрегация
• автоматизация
•QQ диаграммы
•cтатистичекие
“навороты”
Deutsche Bank
Профилирование
Deutsche Bank
Профилирование
Инструментация (“логи”)
▪ Правильный выбор точек замеров
▪ Крупная гранулярность
Сэмплирование
▪ Не требует конфигурации
▪ Проблемы выявляют себя сами
Deutsche Bank
Профилирование
Сэмплирование
JVM использует safepoint
для получения дампа потоков
▪ Нагрузка на
▪ Особенности расстанови
ов
Сэмплер стек трейсов не использующий safepoint`ы
https://github.com/RichardWarburton/honest-profiler
Deutsche Bank
Профилирование
Сэмплирование
стектрейс не значит ничего
Набор стектрейс даёт на вероятности
Условные вероятности
– ключевой момент анализа
Deutsche Bank
Профилирование
Сэмплирование
Deutsche Bank
Профилирование
Сэмплирование
Гистограмма стек фреймов
...
316209
316209
316129
316129
316129
313448
313448
313448
309959
299384
296253
291880
289383
288139
287339
287331
281061
264960
258967
...
28%
28%
28%
28%
28%
28%
28%
28%
28%
27%
26%
26%
26%
26%
26%
26%
25%
24%
23%
Deutsche Bank
1065911
1065908
4096200
316129
3150391
3945843
3945843
3869592
309959
299384
803071
369667
289383
353384
352555
352581
343119
484726
270125
com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:379)
com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:320)
javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java
com.sun.faces.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:188)
javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:9
org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandl
com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandl
javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagH
org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:264)
org.hibernate.internal.SessionImpl.autoFlushIfRequired(SessionImpl.java:1204)
com.sun.faces.facelets.tag.ui.IncludeHandler.apply(IncludeHandler.java:120)
org.jboss.seam.util.Reflections.invoke(Reflections.java:22)
org.hibernate.internal.SessionImpl.list(SessionImpl.java:1261)
org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:32)
org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:2
org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56)
org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:79)
com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:166)
com.sun.faces.facelets.impl.DefaultFaceletContext.includeDefinition(DefaultFaceletCont
Профилирование
Сэмплирование
В ходе эксплуатации
▪ Один дамп в секунду
▪
в час
▪
за рабочий день
▪
в неделю
▪ Достаточно для анализа
▪
▪
байт на стрейс количество потоков в дампе
≈
в неделю
https://github.com/aragozin/jvm-tools
Deutsche Bank
Профилирование
Mission Control / Flight recorder
▪
▪
▪
▪
▪
Компакт бинарный формат
Легковесный
Различные метрики
Сэмплирование потоков
Контекстное сэмплирование
Читайте условия лицензии!
Deutsche Bank
В заключение
▪ Вам нужны метрики с продакшена
хотя бы чтобы возпроизвести проблему
▪ Чуть больше информации и этого может быть
достаточно чтобы идентифицировать её причину
Deutsche Bank
В заключение
Вашем приложении сотни узких мест
но лишь одно из них является проблемой которую
надо решать именно сейчас
Deutsche Bank
СПАСИБО
Алексей Рагозин
Deutsche Bank
Download