HiLoad Java Software<br />
Что такое HiLoad<br />Цель - упереться во все ограничения сразу!<br />Принцип достижения:<br /><ul><li> Детектировать огра...
 Найти причину
 Устранить или обойти</li></ul>Типы ограничений:<br /><ul><li> Ресурсы среды (хендлы, сокеты, треды, и т.п.) – ограничения...
 Производительность (процессора, диска, памяти) – кеширование, распараллеливание
 Синхронизация – внутренняя (семафоры), внешняя («медленные» сокеты)</li></ul>2<br />
Что такое Java<br />Market share в 2002-м году превышал 50%. Снижение доли происходит медленно, и, в основном, в силу прод...
Java vs C++: религия и реальность<br /><ul><li> Подход, а не язык</li></ul>In the study, 38 programmers were asked to writ...
JIT эффективнее статической компиляции (глобальная оптимизация, рекомпиляция)
 У Java есть свои проблемы, но они не очень велики и, как правило, разрешимы</li></ul>4<br />
Сборка мусора<br /><ul><li> В сумме затраты на цикл выделения и освобождения памяти в системах со сборкой мусора зачастую ...
 Есть проблема скорости обращения памяти: очень быстрая аллокация при НЕКОТОРЫХ алгоритмах работы GC может привести к ложн...
 Избегать активной аллокации в коротких циклах обслуживания.
 Понимать, каковы свойства имеющихся сборщиков мусора. Их – больше одного и они настраиваются. Знать о существовании други...
Пулы объектов – были стандартным ответом, но есть минусы, и Sun их не рекомендует. </li></ul>5<br />
Сборка мусора<br /><ul><li> Как правило, программы на Java, всё же, более требовательны к памяти. И, как правило, это не л...
Upcoming SlideShare
Loading in …5
×

Dz Java Hi Load 0.4

2,805 views
2,739 views

Published on

Published in: Technology, News & Politics
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,805
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
54
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Dz Java Hi Load 0.4

  1. 1. HiLoad Java Software<br />
  2. 2. Что такое HiLoad<br />Цель - упереться во все ограничения сразу!<br />Принцип достижения:<br /><ul><li> Детектировать ограничения
  3. 3. Найти причину
  4. 4. Устранить или обойти</li></ul>Типы ограничений:<br /><ul><li> Ресурсы среды (хендлы, сокеты, треды, и т.п.) – ограничения на количество, замедление ОС на большом количестве
  5. 5. Производительность (процессора, диска, памяти) – кеширование, распараллеливание
  6. 6. Синхронизация – внутренняя (семафоры), внешняя («медленные» сокеты)</li></ul>2<br />
  7. 7. Что такое Java<br />Market share в 2002-м году превышал 50%. Снижение доли происходит медленно, и, в основном, в силу продвижения платформы .Net.<br />Технологии Java поддерживают Sun, Oracle, IBM, SAP – почти все, кроме Microsoft :).<br />Java применялась при создании таких систем, как Amazon, Ebay, LinkedIn, Yahoo.<br />Платформа Java – это Ada, AWK, Clojure, Lisp, Forth, Groovy, Haskell, Lua, OCaml, Pascal, PHP, Prolog, Python, Rexx, Ruby, Scala, Scheme, TCL + ещё пара-тройка сотен менее известных или менее актуальных языков.<br />Язык Java – это лучший в мире инструментарий разработчика: Eclipse, Intellij IDEA, NetBeans. Среда разработки Eclipse бесплатна, и вряд ли с чем-либо сравнима по функциональности и количеству дополнительных модулей.<br />3<br />
  8. 8. Java vs C++: религия и реальность<br /><ul><li> Подход, а не язык</li></ul>In the study, 38 programmers were asked to write the same application program in either C/C++ or Java. Applying statistical analysis to the performance data for the programs revealed that actual performance differences depended more on the way the programs were written than on the language used. – O’Reilly<br /><ul><li> Близкие по стилю написания программы на C++ и Java близки по производительности.
  9. 9. JIT эффективнее статической компиляции (глобальная оптимизация, рекомпиляция)
  10. 10. У Java есть свои проблемы, но они не очень велики и, как правило, разрешимы</li></ul>4<br />
  11. 11. Сборка мусора<br /><ul><li> В сумме затраты на цикл выделения и освобождения памяти в системах со сборкой мусора зачастую ниже, чем в классических аллокаторах.
  12. 12. Есть проблема скорости обращения памяти: очень быстрая аллокация при НЕКОТОРЫХ алгоритмах работы GC может привести к ложной нехватке памяти: свободная память есть, но сборщик до неё «не добежал».
  13. 13. Избегать активной аллокации в коротких циклах обслуживания.
  14. 14. Понимать, каковы свойства имеющихся сборщиков мусора. Их – больше одного и они настраиваются. Знать о существовании других виртуальных машин. Oracle JRockIt. Команды java –client и java –server могут дать разницу в скорости на порядок.
  15. 15. Пулы объектов – были стандартным ответом, но есть минусы, и Sun их не рекомендует. </li></ul>5<br />
  16. 16. Сборка мусора<br /><ul><li> Как правило, программы на Java, всё же, более требовательны к памяти. И, как правило, это не лечится. В то же время основные затраты памяти в серверных приложениях – это кешированные данные существенного размера. Для таких данных накладные расходы Java невелики.
  17. 17. Throughput collector: -XX:+UseParallelGC</li></ul>Хорошо работает на многопроцессорных системах в режимах с большим объёмом аллокации и раннего освобождения<br /><ul><li> Concurrent low pause collector: -XX:+UseConcMarkSweepGC </li></ul>Пытается сократить задержки на сборку мусора.<br /><ul><li> Incremental low pause collector: -XX:+UseTrainGC </li></ul>Устаревший, не поддерживается.<br />6<br />
  18. 18. Нити – целый клубок<br />Подход на основе select – ужасен! Ломка control flow, длинный поиск дескриптора в ядре.<br />Не надо бояться. Практический опыт показал, что 10 000 (десять тысяч) нитей отлично отрабатывают под нагрузкой в 100 миллионов показов в сутки - при нелинейном распределении нагрузки.<br />Пулы нитей – стандартная функциональность (ThreadPoolExecutor).<br />Распределение нитей по ядрам зависит от VM и от режима её работы. Для серверного кода – JRockIt. <br />Не забыть про ограничения системы (ulimit) и внутреннюю синхронизацию. И миллион нитей бесполезен, если все они стоят в очереди к одному семафору.<br />7<br />
  19. 19. Back to Select<br />Библиотека NIO – низкоуровнывый эффективный ввод-вывод.<br />Есть аналог select.<br />Есть memory mapped IO.<br />Есть асинхронный ввод-вывод.<br />Операции выполняются на самом низком из возможных уровней. В Unix операция transferTo, скорее всего, выльется в один системный вызов.<br />FileChannel in = new FileInputStream(source).getChannel(); <br />FileChannel out = new FileOutputStream(target).getChannel(); <br />// JavaVM does its best to do this as native I/O operations.<br />in.transferTo (0, in.size(), out); <br />out.close(); in.close(); <br />8<br />
  20. 20. Тяни-толкай<br />Не всё нужно делать в контексте запроса<br />Кешировать данные. Банально, но работает. Построить по запросу объект-ключ, искать по ключу в стандартном TreeMap – может работать удивительно быстро!<br />Готовить данные, не дожидаясь обращения. Первый Yandex.Market стартовал три часа, но после этого вообще не обращался к дискам.<br />Готовить бинарные данные, отстреливать ответ одним write-ом. Пример – отдача баннера.<br />Стратегия явного отказа при cache miss может быть вполне уместна. Лучше показать журнальную статью без новостей, чем потерять посетителя вообще.<br />9<br />
  21. 21. Инструментарий<br />Конечно, Eclipse<br />Профайлер, в том числе и для программ, работающих в среде сервера приложений – узкие места, граф исполнения.<br />Профайлер памяти – использование памяти разными классами, утечки.<br />Apache JMeter – нагрузочное тестирование, генерация нагрузки.<br />JMX – анализ состояния программы и виртуальной машины в ран-тайме – стандартная функциональность в VM, можно дополнять программу своими функциями мониторинга и управления.<br />10<br />
  22. 22. JMX: Heap<br />11<br />
  23. 23. Другие примеры<br /><ul><li> Модуль для отображения векторных географических карт.</li></ul>Написание proof of concept – 4 Завалишино-дня. Основная причина неэффективности – необдуманное применение HashSet. Замена на LinkedList дала взлёт производительности в сотни раз. Производительность (на глаз) оказалась заметно выше, чем у аналога на C++.<br /><ul><li>Система мониторинга судовых систем Gardemarine</li></ul>Основная причина неэффективности – низкая скорость обсчёта бэкграундов приборов и индикаторов (градиенты и т.п.<br />Сделали (в рамках наследования) перехват кода отрисовки, отделили и закешировали отрисовку бэкграундов. Итог – легко отрабатываем 20 кадров/сек. При этом код остался совместим скомпонентами Swing.<br />12<br />
  24. 24. Избыточная гибкость<br />Java – язык, который спроектирован для того, чтобы облегчить работу программиста. И он это действительно делает. Программирование на Java настолько эффективно, что приводит к изрядной генерализации и абстрагированию кода.<br />В свою очередь, обобщённый код (хороший пример - Swing) допускает чрезвычайно гибкое использование. Но это не всегда нужно.<br />Короче: если выкинуть Websphere и поставить JBoss – производительность может возрасти, а потребность в ресурсах – снизится. JBoss можно заменить на Tomcat. А Tomcat – на Jetty.<br />А можно начать с Jetty, и сэкономить кучу времени!<br />В то же время никто не запрещает при необходимости подняться от Jetty до Tomcat – и так далее.<br />13<br />
  25. 25. Разное<br /><ul><li> Не перегрузка, но отказ. Измеряйте загрузку, отказывайте в обслуживании явно. Иначе критическая нагрузка загонит приложение в клинч, выход из которого тяжёл и долог.
  26. 26. Не применяйте сложных механизмов работы с данными, типа ORM, или применяйте их крайне осмотрительно. Отладка производительности Hibernate может вынуть душу даже из админа с каменным сердцем.
  27. 27. Протоколированиеи т.п. – это можно делать асинхронно! Gardemarine нельзя убить, лишив его доступа к диску для записи log-файла, потому что протоколирование идёт через thread pool.</li></ul>14<br />
  28. 28. Realtime Java<br /><ul><li> Для хардкорных realtime приложений.
  29. 29. Не маргинальная технология - около 15 млн упоминаний по оценке Google. Версия 2.1 в релизе, версия 2.2 готовится к выпуску.
  30. 30. Жёсткое ручное управление памятью. Естественно, ссылка на такую память не может покидать пределы realtime кода.
  31. 31. Жёсткие приоритеты, защита от инверсии приоритета.
  32. 32. Механизм обслуживания асинхронных событий (прерываний!).
  33. 33. Наносекундный тайминг.
  34. 34. Прямой доступ к памяти (возможность написания драйверов).</li></ul>15<br />
  35. 35. Digital Zone clients<br />Russian State Corporation RusNano (www.rusnano.com)<br />Adobe (www.adobe.com)<br />Apple (www.apple.com)<br />Yandex (www.yandex.ru)<br />largest Russian search engine<br />Microsoft Russia<br />MET, Russian Ministry of Economic Development <br />Contact information<br />+7 (499) 973-23-80, mailbox@dz.ru,www.dz.ru<br />127055, Moscow, Sushchevskaya str., house 27, structure 2, 334 office<br />16<br />

×