Java Performance
Upcoming SlideShare
Loading in...5
×
 

Java Performance

on

  • 1,774 views

 

Statistics

Views

Total Views
1,774
Slideshare-icon Views on SlideShare
655
Embed Views
1,119

Actions

Likes
1
Downloads
2
Comments
0

8 Embeds 1,119

http://odjug.blogspot.com 1101
http://odjug.blogspot.nl 6
http://odjug.blogspot.de 4
http://odjug.blogspot.ru 4
http://odjug.blogspot.gr 1
http://odjug.blogspot.hu 1
http://webcache.googleusercontent.com 1
http://odjug.blogspot.ca 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Java Performance Java Performance Presentation Transcript

    • 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 правда чуть вышеПараллельное исполнение - не проблемаКогда подход не будет работать?