SlideShare a Scribd company logo
Java Performance




                   Подготовил: Артем Жданов.
Agenda

Теория
– Классические ошибки
– Выбор метрик
– Способы улучшения производительности
Пример
– Workflow система
– Проблемы и решения
У меня все медленно!




     Что делать?
Первый шаг
  «я вижу, что метод foo() реализован неэффективно»
  «по профайлеру видно, что метод bar() – горячий и занимает
  5%»
  «по-моему, у нас тормозит БД, и нужно перейти с DB 1 на DB 2"
 Правильный первый шаг:
1. Выбрать метрику
  – ops/sec, transactions/sec
  – время исполнения
  – время отклика
2. Убедиться в корректности метрики
  – релевантна (учитывает реальный сценарий работы приложения)
  – повторяема
Метрики
    Throughput, Bandwidth. Количество работы, выполненное за
    единицу времени:
    • MB/sec
    • ops/sec, transactions/sec
    • FPS frames per second
    Время...
•   ...работы
     •   Execution time: общее время исполнения
•   ...отклика
     • Latency: время отдельной операции
     • Response time: задержка между стимулом и реакцией
•   ...запуска
     • Startup time: время до начала работы
     • Time to performance: время до начала хорошей работы
    Память
Представление метрик

“A в N раз быстрее B” означает



SpeedUp = ABS(Time(A) – Time(B)) / Time(B);
Как ускорить. Основные шаги

 Что мешает работать быстрее?
  – Делаем эксперименты и проверяем метрики на проблемных местах
 Где это находиться?
  – Делаем и проверяем предположение с помощью profiler tools
 Как это исправить?
  – Итеративный подход
Что можно улучшить
 Уровень системы
  – I/O (Сеть/Диск)
  – Операционная система
  – Процессор/память
 Уровень JVM
  – Издержки работы самой JVM
  – Время GC
 Уровень приложения
  – Количество потоков (мало или даже много)
  – Лишние блокировки, синхронизация
  – Алгоритмические проблемы (лишние вызовы, неэффективные структуры
    данных и алгоритмы)
 Архитектурный уровень
  – Кеширование
  – Распределение нагрузки на нескольких узлов
  – Оптимизация взаимодействия между слоями
Что можно улучшить
 Уровень системы
  – I/O (Сеть/Диск)
  – Операционная система
  – Процессор/память
 Уровень JVM
  – Издержки работы самой JVM
  – Время GC
 Уровень приложения
  – Количество потоков (мало или даже много)
  – Лишние блокировки, синхронизация
  – Алгоритмические проблемы (лишние вызовы, неэффективные структуры
    данных и алгоритмы)
 Архитектурный уровень
  – Кеширование
  – Распределение нагрузки на нескольких узлов
  – Оптимизация взаимодействия между слоями
Что можно улучшить
 Уровень системы
  – I/O (Сеть/Диск)
  – Операционная система
  – Процессор/память
 Уровень JVM
  – Издержки работы самой JVM
  – Время GC
 Уровень приложения
  – Количество потоков (мало или даже много)
  – Лишние блокировки, синхронизация
  – Алгоритмические проблемы (лишние вызовы, неэффективные структуры
    данных и алгоритмы)
 Архитектурный уровень
  – Кеширование
  – Распределение нагрузки на нескольких узлов
  – Оптимизация взаимодействия между слоями
Система распределённых вычислений
 Требования
  – Workflow system
Система распределённых вычислений

 Требования
  Большой объем Read-Only data

                      Data read distribution
                 Read only    HSQL    MySQL    Oracle


                                 7%

                        17%


                       16%              60%
Архитектурные ЗА и ПРОТИВ
Кешируем RO
–   Как распределять кеш между нодами?
–   Как контролировать размер кеша?
–   Как узнать на сколько эффективен кеш?
–   Если через 5 секунд ситуация изменилась?
–   Как организовать кеш локально?
Обрабатываем ивенты параллельно
– Сколько потоков создать?
– А если 2 потока начнут обработку одного
  ивента?
– Как узнать на сколько эффективно
  добавление еще одного потока?
– Если через 5 секунд ситуация изменилась?
Решения
Ранжируем данные в кеше по полезности
– Что полезнее закешировать таблицу Users или Books?
Измеряем производительность системы
– Какую взять метрику?
Используем данные измерений что бы изменить
критерии
– Стало лучше на 5%, это хорошо?
– Стало лучше в 3000 раз, WTF?
2 стратегии измерения
– Application-based
– System-based
System-based




Метрика - events/sec
Может лучше System.nanoTime();?
Какой будет overhead?
Что делать при параллельном исполнении?
Application-based




Метрика уже другая - выполненная работа
Overhead правда чуть выше
Параллельное исполнение - не проблема
Когда подход не будет работать?
Java Performance

More Related Content

PPTX
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
PPTX
Жизнь проекта на production
PPTX
Мониторинг всех слоев web проекта (hl2015)
PPTX
postgresql monitoring by okmeter.io
PDF
Ровная балансировка нагрузки на фронтенд-кластере
PDF
Java Memory Model. Quick introduction.
PPTX
Операционные системы 2015, лекция № 8
PPT
Development on the Knee by Vladimir Khramtsov
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Жизнь проекта на production
Мониторинг всех слоев web проекта (hl2015)
postgresql monitoring by okmeter.io
Ровная балансировка нагрузки на фронтенд-кластере
Java Memory Model. Quick introduction.
Операционные системы 2015, лекция № 8
Development on the Knee by Vladimir Khramtsov

What's hot (20)

PDF
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
PDF
Android Telegram S Optimizations
PDF
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
PDF
Javascript-фреймворки:
 должен остаться только один
PPTX
Проектирование приложений в IBM Cognos ТМ1
PDF
Near-realtime аналитика событий в высоконагруженном проекте
PDF
SECON'2016. Васильков Василий, Серверное программирование сегодня
PPT
Нагрузочное тестирование
PDF
2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем
PDF
FrontDays #1. Илья Кучмин, Оптимизация загрузки тяжелых страниц
PPTX
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
PPTX
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
PDF
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
PDF
Веб-сервер Phantom
PDF
Распределенная система тестирования машинного перевода
ODP
Кораблики. Принципы канбан и теории ограничений
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PPTX
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
ODP
SECON'2014 - Сергей Цивин - Производительность веб-приложений
PDF
Проверка на прочность или нагрузочное тестирование с Jmeter
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
Android Telegram S Optimizations
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
Javascript-фреймворки:
 должен остаться только один
Проектирование приложений в IBM Cognos ТМ1
Near-realtime аналитика событий в высоконагруженном проекте
SECON'2016. Васильков Василий, Серверное программирование сегодня
Нагрузочное тестирование
2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем
FrontDays #1. Илья Кучмин, Оптимизация загрузки тяжелых страниц
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Веб-сервер Phantom
Распределенная система тестирования машинного перевода
Кораблики. Принципы канбан и теории ограничений
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
SECON'2014 - Сергей Цивин - Производительность веб-приложений
Проверка на прочность или нагрузочное тестирование с Jmeter
Ad

Similar to Java Performance (20)

PDF
[jeeconf-2011] Java Platform Performance BoF
PPT
Быстрое масштабирование систем
PDF
Java Platform Performance BoF
PPTX
мониторинг производительности приложения на PINBA
PPTX
2014.12.23 Александр Андреев, Parallels
PDF
владивосток форум производительность_ha
PPTX
Знакомство с In-Memory Data Grid
PPTX
Пишем самый быстрый хеш для кэширования данных
PPT
евгений потапов Root Conf потапов
PPT
Evgeniy Potapov Root Conf потапов
PDF
PPTX
Monitoring-driven эксплуатация (rootconf2015)
PPTX
Оптимизация производительности нагруженных веб-систем на Java
PPTX
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
PDF
Доклад "Мониторинг серверных приложений"
PDF
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
PDF
Load testing with Tsung
PDF
20111002 information retrieval raskovalov_lecture3
PPTX
Agile Vector - внедрение agile разработки в Райффайзенбанке
PPTX
дерюшкин Agile vector
[jeeconf-2011] Java Platform Performance BoF
Быстрое масштабирование систем
Java Platform Performance BoF
мониторинг производительности приложения на PINBA
2014.12.23 Александр Андреев, Parallels
владивосток форум производительность_ha
Знакомство с In-Memory Data Grid
Пишем самый быстрый хеш для кэширования данных
евгений потапов Root Conf потапов
Evgeniy Potapov Root Conf потапов
Monitoring-driven эксплуатация (rootconf2015)
Оптимизация производительности нагруженных веб-систем на Java
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Доклад "Мониторинг серверных приложений"
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Load testing with Tsung
20111002 information retrieval raskovalov_lecture3
Agile Vector - внедрение agile разработки в Райффайзенбанке
дерюшкин Agile vector
Ad

More from Alex Tumanoff (20)

PPTX
Sql server 2019 New Features by Yevhen Nedaskivskyi
PPTX
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
PPTX
Azure data bricks by Eugene Polonichko
PPTX
Sdlc by Anatoliy Anthony Cox
PPTX
Kostenko ux november-2014_1
PPTX
Java 8 in action.jinq.v.1.3
PPT
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
PPTX
Spring.new hope.1.3
PPTX
Sql saturday azure storage by Anton Vidishchev
PPTX
Navigation map factory by Alexey Klimenko
PPTX
Serialization and performance by Sergey Morenets
PPTX
Игры для мобильных платформ by Алексей Рыбаков
PDF
Android sync adapter
PPTX
Async clinic by by Sergey Teplyakov
PPTX
Deep Dive C# by Sergey Teplyakov
PPTX
Bdd by Dmitri Aizenberg
PPTX
Неформальные размышления о сертификации в IT
PPTX
Разработка расширений Firefox
PPTX
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
PPTX
Patterns of parallel programming
Sql server 2019 New Features by Yevhen Nedaskivskyi
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Azure data bricks by Eugene Polonichko
Sdlc by Anatoliy Anthony Cox
Kostenko ux november-2014_1
Java 8 in action.jinq.v.1.3
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
Spring.new hope.1.3
Sql saturday azure storage by Anton Vidishchev
Navigation map factory by Alexey Klimenko
Serialization and performance by Sergey Morenets
Игры для мобильных платформ by Алексей Рыбаков
Android sync adapter
Async clinic by by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
Bdd by Dmitri Aizenberg
Неформальные размышления о сертификации в IT
Разработка расширений Firefox
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
Patterns of parallel programming

Java Performance

  • 1. Java Performance Подготовил: Артем Жданов.
  • 2. Agenda Теория – Классические ошибки – Выбор метрик – Способы улучшения производительности Пример – Workflow система – Проблемы и решения
  • 3. У меня все медленно! Что делать?
  • 4. Первый шаг «я вижу, что метод foo() реализован неэффективно» «по профайлеру видно, что метод bar() – горячий и занимает 5%» «по-моему, у нас тормозит БД, и нужно перейти с DB 1 на DB 2" Правильный первый шаг: 1. Выбрать метрику – ops/sec, transactions/sec – время исполнения – время отклика 2. Убедиться в корректности метрики – релевантна (учитывает реальный сценарий работы приложения) – повторяема
  • 5. Метрики Throughput, Bandwidth. Количество работы, выполненное за единицу времени: • MB/sec • ops/sec, transactions/sec • FPS frames per second Время... • ...работы • Execution time: общее время исполнения • ...отклика • Latency: время отдельной операции • Response time: задержка между стимулом и реакцией • ...запуска • Startup time: время до начала работы • Time to performance: время до начала хорошей работы Память
  • 6. Представление метрик “A в N раз быстрее B” означает SpeedUp = ABS(Time(A) – Time(B)) / Time(B);
  • 7. Как ускорить. Основные шаги Что мешает работать быстрее? – Делаем эксперименты и проверяем метрики на проблемных местах Где это находиться? – Делаем и проверяем предположение с помощью profiler tools Как это исправить? – Итеративный подход
  • 8. Что можно улучшить Уровень системы – I/O (Сеть/Диск) – Операционная система – Процессор/память Уровень JVM – Издержки работы самой JVM – Время GC Уровень приложения – Количество потоков (мало или даже много) – Лишние блокировки, синхронизация – Алгоритмические проблемы (лишние вызовы, неэффективные структуры данных и алгоритмы) Архитектурный уровень – Кеширование – Распределение нагрузки на нескольких узлов – Оптимизация взаимодействия между слоями
  • 9. Что можно улучшить Уровень системы – I/O (Сеть/Диск) – Операционная система – Процессор/память Уровень JVM – Издержки работы самой JVM – Время GC Уровень приложения – Количество потоков (мало или даже много) – Лишние блокировки, синхронизация – Алгоритмические проблемы (лишние вызовы, неэффективные структуры данных и алгоритмы) Архитектурный уровень – Кеширование – Распределение нагрузки на нескольких узлов – Оптимизация взаимодействия между слоями
  • 10. Что можно улучшить Уровень системы – I/O (Сеть/Диск) – Операционная система – Процессор/память Уровень JVM – Издержки работы самой JVM – Время GC Уровень приложения – Количество потоков (мало или даже много) – Лишние блокировки, синхронизация – Алгоритмические проблемы (лишние вызовы, неэффективные структуры данных и алгоритмы) Архитектурный уровень – Кеширование – Распределение нагрузки на нескольких узлов – Оптимизация взаимодействия между слоями
  • 11. Система распределённых вычислений Требования – Workflow system
  • 12. Система распределённых вычислений Требования Большой объем Read-Only data Data read distribution Read only HSQL MySQL Oracle 7% 17% 16% 60%
  • 13. Архитектурные ЗА и ПРОТИВ Кешируем RO – Как распределять кеш между нодами? – Как контролировать размер кеша? – Как узнать на сколько эффективен кеш? – Если через 5 секунд ситуация изменилась? – Как организовать кеш локально? Обрабатываем ивенты параллельно – Сколько потоков создать? – А если 2 потока начнут обработку одного ивента? – Как узнать на сколько эффективно добавление еще одного потока? – Если через 5 секунд ситуация изменилась?
  • 14. Решения Ранжируем данные в кеше по полезности – Что полезнее закешировать таблицу Users или Books? Измеряем производительность системы – Какую взять метрику? Используем данные измерений что бы изменить критерии – Стало лучше на 5%, это хорошо? – Стало лучше в 3000 раз, WTF? 2 стратегии измерения – Application-based – System-based
  • 15. System-based Метрика - events/sec Может лучше System.nanoTime();? Какой будет overhead? Что делать при параллельном исполнении?
  • 16. Application-based Метрика уже другая - выполненная работа Overhead правда чуть выше Параллельное исполнение - не проблема Когда подход не будет работать?