SlideShare a Scribd company logo
1 of 17
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

What's hot

Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPВебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPFlyElephant
 
Android Telegram S Optimizations
Android Telegram S OptimizationsAndroid Telegram S Optimizations
Android Telegram S OptimizationsStepan Korshakov
 
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
Проектирование приложений в IBM Cognos ТМ1
Проектирование приложений в IBM Cognos ТМ1Проектирование приложений в IBM Cognos ТМ1
Проектирование приложений в IBM Cognos ТМ1Yuri Kudryavcev
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеAlexandr Krasheninnikov
 
SECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодняSECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодняSECON
 
Нагрузочное тестирование
Нагрузочное тестированиеНагрузочное тестирование
Нагрузочное тестированиеSPB SQA Group
 
2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем
2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем
2015-12-05 Вадим Литвинов - Проблемы разработки распределённых системHappyDev
 
FrontDays #1. Илья Кучмин, Оптимизация загрузки тяжелых страниц
FrontDays #1. Илья Кучмин, Оптимизация загрузки тяжелых страницFrontDays #1. Илья Кучмин, Оптимизация загрузки тяжелых страниц
FrontDays #1. Илья Кучмин, Оптимизация загрузки тяжелых страницFrontDays
 
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Ontico
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Ontico
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)Nikolay Samokhvalov
 
Веб-сервер Phantom
Веб-сервер PhantomВеб-сервер Phantom
Веб-сервер Phantomyaevents
 
Распределенная система тестирования машинного перевода
Распределенная система тестирования машинного переводаРаспределенная система тестирования машинного перевода
Распределенная система тестирования машинного переводаyaevents
 
Кораблики. Принципы канбан и теории ограничений
Кораблики. Принципы канбан и теории ограниченийКораблики. Принципы канбан и теории ограничений
Кораблики. Принципы канбан и теории ограниченийAnton Nepomnyaschih
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Ontico
 
Проверка на прочность или нагрузочное тестирование с Jmeter
Проверка на прочность или нагрузочное тестирование с JmeterПроверка на прочность или нагрузочное тестирование с Jmeter
Проверка на прочность или нагрузочное тестирование с JmeterAleksey Derkach
 

What's hot (20)

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

Similar to Java Performance

[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoFAleksey Shipilev
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование системMedia Gorod
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 
мониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBAмониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBASlach
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
владивосток форум производительность_ha
владивосток форум производительность_haвладивосток форум производительность_ha
владивосток форум производительность_haElena Ometova
 
Знакомство с In-Memory Data Grid
Знакомство с In-Memory Data GridЗнакомство с In-Memory Data Grid
Знакомство с In-Memory Data GridMikhail Shcherbakov
 
Пишем самый быстрый хеш для кэширования данных
Пишем самый быстрый хеш для кэширования данныхПишем самый быстрый хеш для кэширования данных
Пишем самый быстрый хеш для кэширования данныхRoman Elizarov
 
Evgeniy Potapov Root Conf потапов
Evgeniy Potapov Root Conf   потаповEvgeniy Potapov Root Conf   потапов
Evgeniy Potapov Root Conf потаповrit2010
 
евгений потапов Root Conf потапов
евгений потапов Root Conf   потаповевгений потапов Root Conf   потапов
евгений потапов Root Conf потаповrit2010
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Nikolay Sivko
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsКостянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsLEDC 2016
 
Доклад "Мониторинг серверных приложений"
Доклад "Мониторинг серверных приложений"Доклад "Мониторинг серверных приложений"
Доклад "Мониторинг серверных приложений"Grigoriy Orlov
 
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...Fwdays
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3Computer Science Club
 
дерюшкин Agile vector
дерюшкин   Agile vectorдерюшкин   Agile vector
дерюшкин Agile vectorMagneta AI
 
Agile Vector - внедрение agile разработки в Райффайзенбанке
Agile Vector - внедрение agile разработки в РайффайзенбанкеAgile Vector - внедрение agile разработки в Райффайзенбанке
Agile Vector - внедрение agile разработки в РайффайзенбанкеAlexey Deryushkin
 

Similar to Java Performance (20)

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

More from Alex Tumanoff

Sql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen NedaskivskyiSql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen NedaskivskyiAlex Tumanoff
 
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis ReznikOdessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis ReznikAlex Tumanoff
 
Azure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAzure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAlex Tumanoff
 
Sdlc by Anatoliy Anthony Cox
Sdlc by  Anatoliy Anthony CoxSdlc by  Anatoliy Anthony Cox
Sdlc by Anatoliy Anthony CoxAlex Tumanoff
 
Kostenko ux november-2014_1
Kostenko ux november-2014_1Kostenko ux november-2014_1
Kostenko ux november-2014_1Alex Tumanoff
 
Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3Alex Tumanoff
 
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас..."Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...Alex Tumanoff
 
Sql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton VidishchevSql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton VidishchevAlex Tumanoff
 
Navigation map factory by Alexey Klimenko
Navigation map factory by Alexey KlimenkoNavigation map factory by Alexey Klimenko
Navigation map factory by Alexey KlimenkoAlex Tumanoff
 
Serialization and performance by Sergey Morenets
Serialization and performance by Sergey MorenetsSerialization and performance by Sergey Morenets
Serialization and performance by Sergey MorenetsAlex Tumanoff
 
Игры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей РыбаковИгры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей РыбаковAlex Tumanoff
 
Android sync adapter
Android sync adapterAndroid sync adapter
Android sync adapterAlex Tumanoff
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAlex Tumanoff
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey TeplyakovAlex Tumanoff
 
Bdd by Dmitri Aizenberg
Bdd by Dmitri AizenbergBdd by Dmitri Aizenberg
Bdd by Dmitri AizenbergAlex Tumanoff
 
Неформальные размышления о сертификации в IT
Неформальные размышления о сертификации в ITНеформальные размышления о сертификации в IT
Неформальные размышления о сертификации в ITAlex Tumanoff
 
Разработка расширений Firefox
Разработка расширений FirefoxРазработка расширений Firefox
Разработка расширений FirefoxAlex Tumanoff
 
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So..."AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...Alex Tumanoff
 
Patterns of parallel programming
Patterns of parallel programmingPatterns of parallel programming
Patterns of parallel programmingAlex Tumanoff
 

More from Alex Tumanoff (20)

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