SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Киллер фичи Эрланг 
Юра Жлоба для FuncBy
Потоки в Эрланг, немного бенчмарков и цифр 
Надежность, уровни изоляции ошибок 
Отладка работающией ноды в продакшене 
И пару слов о памяти и сборке мусора
Потоки в Эрланг 
Эрланг – это много, много, много 
легковестных потоков. Бла-бла-бла. 
“Много” – это сколько? 
“Легковестный” – это что значит?
Потоки в Эрланг 
“Много” – это сколько? 
Документация к erl 
раздел Emulator Flags 
Флаг +P 
1024 (210) – 134,217,727 (227) 
262,144 (218)
Потоки в Эрланг 
Вы можете создать 134,217,727 потоков 
(если у вас хватит памяти :)
Потоки в Эрланг 
“Легковестный” – это что значит? 
Сделаем пару бенчмарков: 
Как быстро потоки стартуют 
Сколько памяти получают на старте
Потоки в Эрланг
Потоки в Эрланг 
erl +P 1048576 
Увеличиваем лимит потоков до 1М
Потоки в Эрланг 
Thinkpad T520 
4 ядра Intel Core i5, 2.50GHz 
4Gb оперативной памяти 
из которых свободны 2Gb
Потоки в Эрланг 
Число потоков Время запуска 
200К 0.7 секунды 
400К 2 секунды 
600К 2.8 секунды 
800К 11.7 секунд 
1М 20 секунд
Потоки в Эрланг 
200-600К потоков стартуют 
за 3-5 микросекунд 
800К-1М потоков – 
проявляется нехватка памяти, 
идет своппинг на диск
Потоки в Эрланг
Потоки в Эрланг 
[{total_heap_size, 
233}, 
{heap_size, 233}, 
{stack_size, 1}, 
{memory, 2696}]
Потоки в Эрланг 
Куча: 233 машинных слова 
Стек: 1 машинное слово 
+ внутренние структуры данных 
Всего: 2696 байт
Потоки в Эрланг 
Легковесный поток: 
Стартует за 3-5 микросекунд 
Занимает 2696 байт памяти 
(1M потоков зайнимают 2.5Gb памяти)
Потоки в Эрланг 
Планировщики: 
Их несколько, по числу ядер процессора 
Балансируют нагрузку, перебрасывая 
потоки между собой
Уровни изоляции ошибок 
Try...catch 
Правильно расставь 
Правильно обработай
Уровни изоляции ошибок 
Try...catch 
В Эрланге есть, но используется редко 
потому что ...
Уровни изоляции ошибок 
Supervisor – специальный поток, 
наблюдает за 
Worker – рабочий поток
Уровни изоляции ошибок 
Если в worker-потоке 
возникает ошибка, то: 
Запись ошибки и стэктрейса в лог 
Рестарт потока с начальным состоянием
Уровни изоляции ошибок 
Супервизоры объеденены в дерево, 
где worker-потоки являются листьями 
Можно рестартовать лист, 
или ветку, или все дерево
Уровни изоляции ошибок 
Объединение нод в кластер 
Резервные ноды, failover механизм
Уровни изоляции ошибок 
Try...catch 
Дерево супервизоров 
Кластер
Отладка в продакшене 
Подключиться к удаленной ноде 
Выполнить любой код 
Заменить код
Отладка в продакшене 
Механизм трассировки 
Встроен в виртуальную машину 
на низком уровне 
Мало влияет на производительность
Отладка в продакшене 
Можно получать информацию: 
О жизненном цикле потоков 
Об отправке и получении сообщений 
Вызовы функций 
Состояние потоков
Отладка в продакшене 
Можно получать информацию: 
Работа планировщика 
Потребление памяти 
Работа сборщика мусора
Отладка в продакшене 
Данные можно: 
Наблюдать в консоли 
Направить в файл 
Обработать в кастомной функции 
Обработать на другой ноде
Отладка в продакшене 
Теоретически 
можно узнать почти обо всем, 
что происходит в ноде 
Практически главная проблема 
найти нужную информацию 
во всем этом массиве данных
Сборка мусора 
В функциональных языках проще 
благодаря неизменяемым переменным
Сборка мусора 
2 поколения объектов: 
Молодые (короткоживущие) 
Старые (долгоживущие)
Сборка мусора 
Отдельный сборщик мусора 
для каждого потока
Сборка мусора 
Нет эффекта Stop World 
Короткоживущие потоки 
обходятся без сборки мусора 
Долгоживущие с малым расходом 
памяти тоже
Сборка мусора 
Оказывает мало влияния 
на производительность системы
Вопросы?

Weitere ähnliche Inhalte

Was ist angesagt?

Установка окружения для СУО Apertum QSystem
Установка окружения для СУО Apertum QSystemУстановка окружения для СУО Apertum QSystem
Установка окружения для СУО Apertum QSystemkievfriend
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программированиеPython Meetup
 
Опыт применения виртуализации для web-систем часть 2
Опыт применения виртуализации для web-систем часть 2Опыт применения виртуализации для web-систем часть 2
Опыт применения виртуализации для web-систем часть 2Alex Chistyakov
 
Всероссийская открытая студенческая олимпиада «Сетевые технологии» 2013. Зада...
Всероссийская открытая студенческая олимпиада «Сетевые технологии» 2013. Зада...Всероссийская открытая студенческая олимпиада «Сетевые технологии» 2013. Зада...
Всероссийская открытая студенческая олимпиада «Сетевые технологии» 2013. Зада...Cisco Russia
 
Operating Systems Hardening
Operating Systems HardeningOperating Systems Hardening
Operating Systems HardeningVasily Sartakov
 
CodeFest 2013. Чистяков А. — Использование систем виртуализации в веб
CodeFest 2013. Чистяков А. — Использование систем виртуализации в вебCodeFest 2013. Чистяков А. — Использование систем виртуализации в веб
CodeFest 2013. Чистяков А. — Использование систем виртуализации в вебCodeFest
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 

Was ist angesagt? (8)

Установка окружения для СУО Apertum QSystem
Установка окружения для СУО Apertum QSystemУстановка окружения для СУО Apertum QSystem
Установка окружения для СУО Apertum QSystem
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программирование
 
Опыт применения виртуализации для web-систем часть 2
Опыт применения виртуализации для web-систем часть 2Опыт применения виртуализации для web-систем часть 2
Опыт применения виртуализации для web-систем часть 2
 
Всероссийская открытая студенческая олимпиада «Сетевые технологии» 2013. Зада...
Всероссийская открытая студенческая олимпиада «Сетевые технологии» 2013. Зада...Всероссийская открытая студенческая олимпиада «Сетевые технологии» 2013. Зада...
Всероссийская открытая студенческая олимпиада «Сетевые технологии» 2013. Зада...
 
Operating Systems Hardening
Operating Systems HardeningOperating Systems Hardening
Operating Systems Hardening
 
CodeFest 2013. Чистяков А. — Использование систем виртуализации в веб
CodeFest 2013. Чистяков А. — Использование систем виртуализации в вебCodeFest 2013. Чистяков А. — Использование систем виртуализации в веб
CodeFest 2013. Чистяков А. — Использование систем виртуализации в веб
 
About Python
About PythonAbout Python
About Python
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 

Ähnlich wie Erlang killer features

Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)Vadim Kosov
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4rit2011
 
Distributed erlang
Distributed erlangDistributed erlang
Distributed erlangYuri Zhloba
 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Max Lapshin
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang productionAlina Dolgikh
 
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”
Olga Lavrentieva
 
Лекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и системЛекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и системpianist2317
 
Конструкция и компоновка персонального компьютера
Конструкция и компоновка персонального компьютераКонструкция и компоновка персонального компьютера
Конструкция и компоновка персонального компьютераAlexandr Konfidentsialno
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)Ontico
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)Ontico
 
Coro - реальные потоки в Perl
Coro - реальные потоки в PerlCoro - реальные потоки в Perl
Coro - реальные потоки в PerlIlya Zelenchuk
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS Pavel Tsukanov
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4HighLoad2009
 
Введение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
Введение в реверс-инжиниринг вредоносного ПО - Сергей ХарюкВведение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
Введение в реверс-инжиниринг вредоносного ПО - Сергей ХарюкHackIT Ukraine
 
Нейронные сети: быстрый инференс на GPU с помощью TensorRT (демо) / Дмитрий К...
Нейронные сети: быстрый инференс на GPU с помощью TensorRT (демо) / Дмитрий К...Нейронные сети: быстрый инференс на GPU с помощью TensorRT (демо) / Дмитрий К...
Нейронные сети: быстрый инференс на GPU с помощью TensorRT (демо) / Дмитрий К...Ontico
 

Ähnlich wie Erlang killer features (20)

Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
 
Distributed erlang
Distributed erlangDistributed erlang
Distributed erlang
 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang production
 
Erlang ruby
Erlang rubyErlang ruby
Erlang ruby
 
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”

 
Лекция № 3 Организация ЭВМ и систем
Лекция № 3 Организация ЭВМ и системЛекция № 3 Организация ЭВМ и систем
Лекция № 3 Организация ЭВМ и систем
 
Лекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и системЛекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и систем
 
Конструкция и компоновка персонального компьютера
Конструкция и компоновка персонального компьютераКонструкция и компоновка персонального компьютера
Конструкция и компоновка персонального компьютера
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 
Presentation_1369080393540
Presentation_1369080393540Presentation_1369080393540
Presentation_1369080393540
 
Multithreading in go
Multithreading in goMultithreading in go
Multithreading in go
 
Coro - реальные потоки в Perl
Coro - реальные потоки в PerlCoro - реальные потоки в Perl
Coro - реальные потоки в Perl
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4
 
Theme 07
Theme 07Theme 07
Theme 07
 
Введение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
Введение в реверс-инжиниринг вредоносного ПО - Сергей ХарюкВведение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
Введение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
 
Нейронные сети: быстрый инференс на GPU с помощью TensorRT (демо) / Дмитрий К...
Нейронные сети: быстрый инференс на GPU с помощью TensorRT (демо) / Дмитрий К...Нейронные сети: быстрый инференс на GPU с помощью TensorRT (демо) / Дмитрий К...
Нейронные сети: быстрый инференс на GPU с помощью TensorRT (демо) / Дмитрий К...
 

Erlang killer features

  • 1. Киллер фичи Эрланг Юра Жлоба для FuncBy
  • 2. Потоки в Эрланг, немного бенчмарков и цифр Надежность, уровни изоляции ошибок Отладка работающией ноды в продакшене И пару слов о памяти и сборке мусора
  • 3. Потоки в Эрланг Эрланг – это много, много, много легковестных потоков. Бла-бла-бла. “Много” – это сколько? “Легковестный” – это что значит?
  • 4. Потоки в Эрланг “Много” – это сколько? Документация к erl раздел Emulator Flags Флаг +P 1024 (210) – 134,217,727 (227) 262,144 (218)
  • 5. Потоки в Эрланг Вы можете создать 134,217,727 потоков (если у вас хватит памяти :)
  • 6. Потоки в Эрланг “Легковестный” – это что значит? Сделаем пару бенчмарков: Как быстро потоки стартуют Сколько памяти получают на старте
  • 8. Потоки в Эрланг erl +P 1048576 Увеличиваем лимит потоков до 1М
  • 9. Потоки в Эрланг Thinkpad T520 4 ядра Intel Core i5, 2.50GHz 4Gb оперативной памяти из которых свободны 2Gb
  • 10. Потоки в Эрланг Число потоков Время запуска 200К 0.7 секунды 400К 2 секунды 600К 2.8 секунды 800К 11.7 секунд 1М 20 секунд
  • 11. Потоки в Эрланг 200-600К потоков стартуют за 3-5 микросекунд 800К-1М потоков – проявляется нехватка памяти, идет своппинг на диск
  • 13. Потоки в Эрланг [{total_heap_size, 233}, {heap_size, 233}, {stack_size, 1}, {memory, 2696}]
  • 14. Потоки в Эрланг Куча: 233 машинных слова Стек: 1 машинное слово + внутренние структуры данных Всего: 2696 байт
  • 15. Потоки в Эрланг Легковесный поток: Стартует за 3-5 микросекунд Занимает 2696 байт памяти (1M потоков зайнимают 2.5Gb памяти)
  • 16. Потоки в Эрланг Планировщики: Их несколько, по числу ядер процессора Балансируют нагрузку, перебрасывая потоки между собой
  • 17. Уровни изоляции ошибок Try...catch Правильно расставь Правильно обработай
  • 18. Уровни изоляции ошибок Try...catch В Эрланге есть, но используется редко потому что ...
  • 19. Уровни изоляции ошибок Supervisor – специальный поток, наблюдает за Worker – рабочий поток
  • 20. Уровни изоляции ошибок Если в worker-потоке возникает ошибка, то: Запись ошибки и стэктрейса в лог Рестарт потока с начальным состоянием
  • 21. Уровни изоляции ошибок Супервизоры объеденены в дерево, где worker-потоки являются листьями Можно рестартовать лист, или ветку, или все дерево
  • 22. Уровни изоляции ошибок Объединение нод в кластер Резервные ноды, failover механизм
  • 23. Уровни изоляции ошибок Try...catch Дерево супервизоров Кластер
  • 24. Отладка в продакшене Подключиться к удаленной ноде Выполнить любой код Заменить код
  • 25. Отладка в продакшене Механизм трассировки Встроен в виртуальную машину на низком уровне Мало влияет на производительность
  • 26. Отладка в продакшене Можно получать информацию: О жизненном цикле потоков Об отправке и получении сообщений Вызовы функций Состояние потоков
  • 27. Отладка в продакшене Можно получать информацию: Работа планировщика Потребление памяти Работа сборщика мусора
  • 28. Отладка в продакшене Данные можно: Наблюдать в консоли Направить в файл Обработать в кастомной функции Обработать на другой ноде
  • 29. Отладка в продакшене Теоретически можно узнать почти обо всем, что происходит в ноде Практически главная проблема найти нужную информацию во всем этом массиве данных
  • 30. Сборка мусора В функциональных языках проще благодаря неизменяемым переменным
  • 31. Сборка мусора 2 поколения объектов: Молодые (короткоживущие) Старые (долгоживущие)
  • 32. Сборка мусора Отдельный сборщик мусора для каждого потока
  • 33. Сборка мусора Нет эффекта Stop World Короткоживущие потоки обходятся без сборки мусора Долгоживущие с малым расходом памяти тоже
  • 34. Сборка мусора Оказывает мало влияния на производительность системы