25
профилирование Эрливидео Эрливидео Макс Лапшин [email protected]

Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

  • Upload
    ontico

  • View
    2.281

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

профилированиеЭрливидеоЭрливидео

Макс Лапшин[email protected]

Page 2: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Эрливидео

• Потоковое видео

• : MPEG-TS, RTMP, …Разные протоколы

• Высокая эффективность

Page 3: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Разные нагрузки

• : , Тысячи пар один источник одинклиент

• , Один источник тысячи клиентов

Page 4: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Видео

• : 50 / , 500 /Один поток кадров сек КБит с

• 2000  — 100 000 / .клиентов кадров сек

•  1 /Суммарно ГБит с

Page 5: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

RTMP

• У каждого клиента своё

• Каждому клиенту своя копия потока

• , Данные общие заголовки разные

Page 6: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

RTMP

•  — Скорости не хватает клиентзалипает

•  — Ошибка в тайстемпе клиентзалипает

•  — - Клиент залипает надо что тоделать

Page 7: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Рост эрливидео

• 800 Начались проблемы на клиентах

• Неверная архитектура

• Пришлось профилировать

Page 8: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Профилирование

•  —  Девелопмент одно продакшндругое

• Разные версии клиентов

• Разные скорости каналов

• Разные задержки на каналах

Page 9: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Профилирование

• Профилирование на продакшне

• Не отключая пользователей

• Без деградации системы

Page 10: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Инструменты

• Valgrind и профилировщики тормозятсистему

• gdb вносит искажения в код

Page 11: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Инструменты

• Erlang предлагает другие подходы кпрофилированию

Page 12: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Erlang

• Данные и потоки выполнения, объединены как процессы ОС

• Обмен асинхронными сообщениями

• Message box у каждого процесса

Page 13: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Erlang

• Все данные немутабельные

•  — , Процесс рекурсивная функция вызывающая себя с новым значением

Page 14: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Erlang

• Один процесс под каждого клиента

• « »Один процесс под каждый объект

• Вызовы методов строгопоследовательны

Page 15: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Lowload

• -« » Процесс поток шлет сообщения-« »процессам клиентам

• RTMP Клиенты упаковывают сами

• FPS*N в системе сообщений

Page 16: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Тормоза

• « » « »Начинаются лаги и залипание

• ? ?Куда смотреть Что мерять

Page 17: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Мониторинг

• Меряем очереди сообщений

• erlang:process_info(Pid,message_queue_len)

Page 18: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Мониторинг

• CPUМеряем загрузку

• etop:start()

• мониторим общую память процессов

Page 19: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Узкие места

• В узких местах накапливаютсясообщения

• CPU, Растет потребляемый процессом

• Накапливается память

Page 20: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Узкие места

• Процессу не хватает одного ядра

• Недообрабатывает сообщения

• Накапливается память

• Встают в ожидании клиентскиепроцессы

Page 21: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

?Как боролись

• Уменьшили количество сообщений

• Прямая запись в сокет

• Распараллелили запись в сокеты поядрам

Page 22: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Результат

• Во много раз увеличили количество одновременных клиентов

Page 23: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Рекомендации

• Планировать количество проходящихсообщений

• Уменьшать работу внутри вызываемого процесса

•  — Раскладывать работу по процессам расползутся по ядрам

Page 24: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

Выводы

• erlang Профилировка приложений на возможен без деградации качества

обслуживания

• Методы поиска проблем несложны иэффективны

Page 25: Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

?Вопросы

Макс Лапшин[email protected]