SlideShare a Scribd company logo
1 of 40
Download to read offline
Отладка multicore
производительности
софта на Erlang
Максим Лапшин
max@erlyvideo.org
Multicore профилирование
• Когда одного ядра не хватает
• И процессор недозагружен
• А скорость обработки падает
Добро пожаловать в
уютный multicore ад
multicore там, где надо в памяти
состыковывать онлайн клиентов
О чём поговорим
• История одного тикета в нашем редмайне
• Пришли два клиента, пожаловались на тормоза
• Мы пошли разбираться
htop что-то показывает
Erlang использует акторы
начнем их исследовать
Акторы вместо тредов
• Актор — это микропроцесс в общем пространстве
• Изоляция по данным
• Коммуникация с помощью сообщений
• Share nothing облегчает параллелизм
• Ещё неплохо бы immutable
etop
• в erlang вызов функции — редукция
• каждый оборот цикла — редукция
• etop меряет по редукциям
fprof, eprof
• Очень грубые профилировщики линейного кода
• меряют больше редукции, чем такты CPU
• вносят сильные искажения в замеры
htop вам не друг
• scheduler spin time — жжет такты впустую
• надо смотреть на scheduler usage внутри beam
• erlang:statistics(scheduler_wall_time)
Чего-то намеряли, но
ничего непонятно
Акторы тупят
• Всё весело запрограммировали, но всё легло
• Пропускная способность ниже рассчетной
• CPU мало используется
• Как эти ваши акторы профилировать?!!
Бутылочные горлышки
• Работы много, но всё поручили одному
• Например это актор синглтон
• Инспектируем очереди сообщений
Перегруженный актор
• Берем список процессов
• Забираем process_info(Pid, message_queue_len)
• Сортируем
• У первых 10 берем стектрейс
Перегруженный актор
• Тысячи или миллионы сообщений в очереди
• Надо шардить или рефакторить
• Erlang пенализирует того, кто шлет такому
сообщения (но об этом подробнее дальше)
• То же самое будет в Go/Scala
• Можно воспользоваться ets
Привет, блокировки
• Треды лишь спрятаны акторами
• Мьютексы никуда не делись
• Просто теперь они спрятаны
• Но erlang помогает их отследить!
Где мьютексы в erlang
• главный мьютекс у каждой ets
• 8-16 мьютексов на чтение и запись в ets
• мьютекс у каждого процесса
• и ещё около сотни
lcnt
lcnt
• инструмент в erlang для сборки метрик по мьютексам
• стоит некоторых ресурсов, но не смертельно
• некоторые ньюансы пришлось патчить в эрланге
• кроме мьютексов есть spinlock в ets
lcnt
• Для тех, кто читает со slideshare
• lcnt:start(), lcnt:rt_opt({copy_save, true}),lcnt:clear(),
timer:sleep(5000), lcnt:collect(), lcnt:swap_pid_keys(),
lcnt:conflicts([{max_locks, 5}]).
• lcnt:inspect(proc_status).
Как можно всё испортить?
• проверять process_info у другого процесса
• очень много писать в ets
• межтредное взаимодействие
• бездумно частая аллокация
Перегружен синглтон
Механика поломок
• отправитель делает process_info(flu_pulsedb,
message_queue_len)
• bif лочит очередь сообщений flu_pulsedb
• коллизии на очереди сообщений (proc_msgq)
• все шедулеры тормозят
Перегружена ets
Что делать с ets?
• Шардить на разные ets. Больше таблиц, больше
локов, реже коллизии
• Пропускать всё через единый процесс на таблицу
О чём умолчим
• эффект от atomic на N-процессорном сервере
• false sharing
• как это детектить в эрланге — непонятно
Локи убрали, CPU в полку,
что дальше?
scheduler time
• С помощью trace можно узнать время постановки
и снятия с шедулера
• очень жестокая штука
• помогает получить иную картину мира
msacc
• Очень дешевый быстрый анализ расходов CPU
• аллокатор, C code, busy_wait, check_io, emulator,
ets, gc, gc_full, nif, port, send, sleep, timers, other
• надо перекомпиливать для расширенного
варианта
msacc
• Включается, собирает, выключается
• Можно мерять за 2-10 секунд
• Но имеет смысл ловить всплески за 100-200 мс
msacc
msacc
• Оказалось, замучали аллокатор
Что делать с аллокатором?
• В erlang очень, очень крутые аллокаторы
• Мультитредные, многоступенчатые
• Удобно и понятно настраивается
• +MBas aoffcaobf +MBacul 0 -MBlmbcs 512 -MEas
aobf -MElmbcs 512
instrument
• Ещё один механизм изучения erlang VM
• показывает, кто аллоцирует много данных
• тяжело запускать на полном продакшне
instrument
instrument
• Нашли, где делаем кучу лишней аллокации
erts_alloc_config
• Подбирает настройки аллокатора
• Но выключает мультитредный аллокатор
(beam +Mea config)
• Собирает историю и предлагает настройки
Наш опыт
• Потратили 3 месяца на поиск загадочной
проблемы, спонтанно возникшей где-то
• Разгребли 9 фатальных локов с помощью lcnt,
msacc
• Починили аллокацию с помощью instrument,
erts_alloc_config
• Случайно нашли три строчки, портивших всё
Вопросы?
Максим Лапшин, Flussonic
max@erlyvideo.org

More Related Content

What's hot

Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Ontico
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Ontico
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
Ontico
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Ontico
 
Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)
Ontico
 
Цена абстракции, Андрей Аксёнов (Sphinx)
Цена абстракции, Андрей Аксёнов (Sphinx)Цена абстракции, Андрей Аксёнов (Sphinx)
Цена абстракции, Андрей Аксёнов (Sphinx)
Ontico
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
Ontico
 

What's hot (20)

Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
 
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
 
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
 
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016
 
Там, где Rails не справляются
Там, где Rails не справляютсяТам, где Rails не справляются
Там, где Rails не справляются
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
 
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
 
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
 
Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)
 
Цена абстракции, Андрей Аксёнов (Sphinx)
Цена абстракции, Андрей Аксёнов (Sphinx)Цена абстракции, Андрей Аксёнов (Sphinx)
Цена абстракции, Андрей Аксёнов (Sphinx)
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
 
Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)
 

Viewers also liked

Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Ontico
 
Archival Disc на смену Blu-ray: построение архивного хранилища на оптических ...
Archival Disc на смену Blu-ray: построение архивного хранилища на оптических ...Archival Disc на смену Blu-ray: построение архивного хранилища на оптических ...
Archival Disc на смену Blu-ray: построение архивного хранилища на оптических ...
Ontico
 
Vulnerability intelligence with vulners.com / Кирилл Ермаков, Игорь Булатенко...
Vulnerability intelligence with vulners.com / Кирилл Ермаков, Игорь Булатенко...Vulnerability intelligence with vulners.com / Кирилл Ермаков, Игорь Булатенко...
Vulnerability intelligence with vulners.com / Кирилл Ермаков, Игорь Булатенко...
Ontico
 
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
Ontico
 
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Ontico
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
Ontico
 
Как смигрировать 50Пб в 32 без даунтайма? / Альберт Галимов, Андрей Сумин (Ma...
Как смигрировать 50Пб в 32 без даунтайма? / Альберт Галимов, Андрей Сумин (Ma...Как смигрировать 50Пб в 32 без даунтайма? / Альберт Галимов, Андрей Сумин (Ma...
Как смигрировать 50Пб в 32 без даунтайма? / Альберт Галимов, Андрей Сумин (Ma...
Ontico
 
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...
Долгожданный релиз pg_pathman 1.0 / Александр Коротков,  Дмитрий Иванов (Post...Долгожданный релиз pg_pathman 1.0 / Александр Коротков,  Дмитрий Иванов (Post...
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...
Ontico
 
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
Ontico
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Ontico
 

Viewers also liked (20)

Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 
Archival Disc на смену Blu-ray: построение архивного хранилища на оптических ...
Archival Disc на смену Blu-ray: построение архивного хранилища на оптических ...Archival Disc на смену Blu-ray: построение архивного хранилища на оптических ...
Archival Disc на смену Blu-ray: построение архивного хранилища на оптических ...
 
Vulnerability intelligence with vulners.com / Кирилл Ермаков, Игорь Булатенко...
Vulnerability intelligence with vulners.com / Кирилл Ермаков, Игорь Булатенко...Vulnerability intelligence with vulners.com / Кирилл Ермаков, Игорь Булатенко...
Vulnerability intelligence with vulners.com / Кирилл Ермаков, Игорь Булатенко...
 
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
 
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
 
Erlang killer features
Erlang killer featuresErlang killer features
Erlang killer features
 
Максим Лапшин — введение в Erlang
Максим Лапшин — введение в ErlangМаксим Лапшин — введение в Erlang
Максим Лапшин — введение в Erlang
 
Cистемы с непосредственным жидкостным охлаждением / Василий Кирсанов (ТК Связь)
Cистемы с непосредственным жидкостным охлаждением / Василий Кирсанов (ТК Связь)Cистемы с непосредственным жидкостным охлаждением / Василий Кирсанов (ТК Связь)
Cистемы с непосредственным жидкостным охлаждением / Василий Кирсанов (ТК Связь)
 
Erlang, the big switch in social games
Erlang, the big switch in social gamesErlang, the big switch in social games
Erlang, the big switch in social games
 
Non-Relational Postgres / Bruce Momjian (EnterpriseDB)
Non-Relational Postgres / Bruce Momjian (EnterpriseDB)Non-Relational Postgres / Bruce Momjian (EnterpriseDB)
Non-Relational Postgres / Bruce Momjian (EnterpriseDB)
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
 
Your hero images need you: Save the day with HTTP2 image loading / Tobias Bal...
Your hero images need you: Save the day with HTTP2 image loading / Tobias Bal...Your hero images need you: Save the day with HTTP2 image loading / Tobias Bal...
Your hero images need you: Save the day with HTTP2 image loading / Tobias Bal...
 
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
 
Peeking into the Black Hole Called PL/PGSQL - the New PL Profiler / Jan Wieck...
Peeking into the Black Hole Called PL/PGSQL - the New PL Profiler / Jan Wieck...Peeking into the Black Hole Called PL/PGSQL - the New PL Profiler / Jan Wieck...
Peeking into the Black Hole Called PL/PGSQL - the New PL Profiler / Jan Wieck...
 
Как смигрировать 50Пб в 32 без даунтайма? / Альберт Галимов, Андрей Сумин (Ma...
Как смигрировать 50Пб в 32 без даунтайма? / Альберт Галимов, Андрей Сумин (Ma...Как смигрировать 50Пб в 32 без даунтайма? / Альберт Галимов, Андрей Сумин (Ma...
Как смигрировать 50Пб в 32 без даунтайма? / Альберт Галимов, Андрей Сумин (Ma...
 
Как мы сделали PHP 7 в два раза быстрее PHP 5 / Дмитрий Стогов (Zend Technolo...
Как мы сделали PHP 7 в два раза быстрее PHP 5 / Дмитрий Стогов (Zend Technolo...Как мы сделали PHP 7 в два раза быстрее PHP 5 / Дмитрий Стогов (Zend Technolo...
Как мы сделали PHP 7 в два раза быстрее PHP 5 / Дмитрий Стогов (Zend Technolo...
 
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...
Долгожданный релиз pg_pathman 1.0 / Александр Коротков,  Дмитрий Иванов (Post...Долгожданный релиз pg_pathman 1.0 / Александр Коротков,  Дмитрий Иванов (Post...
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...
 
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
 
PostgreSQL @Alibaba Cloud / Xianming Dou (Alibaba Cloud)
PostgreSQL @Alibaba Cloud / Xianming Dou (Alibaba Cloud)PostgreSQL @Alibaba Cloud / Xianming Dou (Alibaba Cloud)
PostgreSQL @Alibaba Cloud / Xianming Dou (Alibaba Cloud)
 

Similar to Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)

Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
Dmitry Buzdin
 
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере ResharperCodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest
 
Erlang мгновенное просветление
Erlang  мгновенное просветлениеErlang  мгновенное просветление
Erlang мгновенное просветление
Maxim Sokhatsky
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
Alex Chistyakov
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Ontico
 
Анатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей СмирновАнатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей Смирнов
Ontico
 
Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)
Andrey Smirnov
 

Similar to Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) (20)

Отличие Erlang от объектных языков
Отличие Erlang от объектных языковОтличие Erlang от объектных языков
Отличие Erlang от объектных языков
 
Erlang for Yandex
Erlang for YandexErlang for Yandex
Erlang for Yandex
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang production
 
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на production
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPВебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
 
Event Machine
Event MachineEvent Machine
Event Machine
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
 
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере ResharperCodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
 
Erlang мгновенное просветление
Erlang  мгновенное просветлениеErlang  мгновенное просветление
Erlang мгновенное просветление
 
Eventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийEventmachine: структура evented-приложений
Eventmachine: структура evented-приложений
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
 
Анатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей СмирновАнатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей Смирнов
 
Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)
 

More from Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)

  • 1. Отладка multicore производительности софта на Erlang Максим Лапшин max@erlyvideo.org
  • 2. Multicore профилирование • Когда одного ядра не хватает • И процессор недозагружен • А скорость обработки падает
  • 4. multicore там, где надо в памяти состыковывать онлайн клиентов
  • 5. О чём поговорим • История одного тикета в нашем редмайне • Пришли два клиента, пожаловались на тормоза • Мы пошли разбираться
  • 8. Акторы вместо тредов • Актор — это микропроцесс в общем пространстве • Изоляция по данным • Коммуникация с помощью сообщений • Share nothing облегчает параллелизм • Ещё неплохо бы immutable
  • 9. etop • в erlang вызов функции — редукция • каждый оборот цикла — редукция • etop меряет по редукциям
  • 10. fprof, eprof • Очень грубые профилировщики линейного кода • меряют больше редукции, чем такты CPU • вносят сильные искажения в замеры
  • 11. htop вам не друг • scheduler spin time — жжет такты впустую • надо смотреть на scheduler usage внутри beam • erlang:statistics(scheduler_wall_time)
  • 13. Акторы тупят • Всё весело запрограммировали, но всё легло • Пропускная способность ниже рассчетной • CPU мало используется • Как эти ваши акторы профилировать?!!
  • 14. Бутылочные горлышки • Работы много, но всё поручили одному • Например это актор синглтон • Инспектируем очереди сообщений
  • 15. Перегруженный актор • Берем список процессов • Забираем process_info(Pid, message_queue_len) • Сортируем • У первых 10 берем стектрейс
  • 16. Перегруженный актор • Тысячи или миллионы сообщений в очереди • Надо шардить или рефакторить • Erlang пенализирует того, кто шлет такому сообщения (но об этом подробнее дальше) • То же самое будет в Go/Scala • Можно воспользоваться ets
  • 17. Привет, блокировки • Треды лишь спрятаны акторами • Мьютексы никуда не делись • Просто теперь они спрятаны • Но erlang помогает их отследить!
  • 18. Где мьютексы в erlang • главный мьютекс у каждой ets • 8-16 мьютексов на чтение и запись в ets • мьютекс у каждого процесса • и ещё около сотни
  • 19. lcnt
  • 20. lcnt • инструмент в erlang для сборки метрик по мьютексам • стоит некоторых ресурсов, но не смертельно • некоторые ньюансы пришлось патчить в эрланге • кроме мьютексов есть spinlock в ets
  • 21. lcnt • Для тех, кто читает со slideshare • lcnt:start(), lcnt:rt_opt({copy_save, true}),lcnt:clear(), timer:sleep(5000), lcnt:collect(), lcnt:swap_pid_keys(), lcnt:conflicts([{max_locks, 5}]). • lcnt:inspect(proc_status).
  • 22. Как можно всё испортить? • проверять process_info у другого процесса • очень много писать в ets • межтредное взаимодействие • бездумно частая аллокация
  • 24. Механика поломок • отправитель делает process_info(flu_pulsedb, message_queue_len) • bif лочит очередь сообщений flu_pulsedb • коллизии на очереди сообщений (proc_msgq) • все шедулеры тормозят
  • 26. Что делать с ets? • Шардить на разные ets. Больше таблиц, больше локов, реже коллизии • Пропускать всё через единый процесс на таблицу
  • 27. О чём умолчим • эффект от atomic на N-процессорном сервере • false sharing • как это детектить в эрланге — непонятно
  • 28. Локи убрали, CPU в полку, что дальше?
  • 29. scheduler time • С помощью trace можно узнать время постановки и снятия с шедулера • очень жестокая штука • помогает получить иную картину мира
  • 30. msacc • Очень дешевый быстрый анализ расходов CPU • аллокатор, C code, busy_wait, check_io, emulator, ets, gc, gc_full, nif, port, send, sleep, timers, other • надо перекомпиливать для расширенного варианта
  • 31. msacc • Включается, собирает, выключается • Можно мерять за 2-10 секунд • Но имеет смысл ловить всплески за 100-200 мс
  • 32. msacc
  • 34. Что делать с аллокатором? • В erlang очень, очень крутые аллокаторы • Мультитредные, многоступенчатые • Удобно и понятно настраивается • +MBas aoffcaobf +MBacul 0 -MBlmbcs 512 -MEas aobf -MElmbcs 512
  • 35. instrument • Ещё один механизм изучения erlang VM • показывает, кто аллоцирует много данных • тяжело запускать на полном продакшне
  • 37. instrument • Нашли, где делаем кучу лишней аллокации
  • 38. erts_alloc_config • Подбирает настройки аллокатора • Но выключает мультитредный аллокатор (beam +Mea config) • Собирает историю и предлагает настройки
  • 39. Наш опыт • Потратили 3 месяца на поиск загадочной проблемы, спонтанно возникшей где-то • Разгребли 9 фатальных локов с помощью lcnt, msacc • Починили аллокацию с помощью instrument, erts_alloc_config • Случайно нашли три строчки, портивших всё