@3ton

Какова последовательность поиска утечек памяти на Ruby?

Имеется приложение написанное не мною и до меня.
Оно отвечает за бизнес-логику телефонии, а так же за предоставление API пользования этой бизнес-логикой.

Само приложение использует библиотеки Adhearsion(для общения с Asterisk) и Sinatra для API

В определенный момент виртуальная машина подвисла на столько что даже по SSH не возможно было подключиться к ней и пришлось делать Hard Reset.

В процессе разбирательств было определено проблемное место - приложение на Ruby.
Оно в момент старта отъедало 100 метров оперативы, через пару недель оно уже отжирает более гига оперативы.

Хотелось бы понять каким образом ищутся утечки памяти, либо не закрытые/удаленые объекты в памяти
  • Вопрос задан
  • 62 просмотра
Пригласить эксперта
Ответы на вопрос 2
2ord
@2ord
продвинутый чайник
Обычно это не утечки памяти, а раздувание памяти из-за бездумного программирования: чтение огромного JSON целиком в память, чтение всех записей с БД в память (Product.all) и пр.

Есть gem, с которого предлагаю начать расследование: derailed_benchmarks. С его помощью можно определить сколько памяти занимает приложение при старте, включая фреймворк RoR. См. как подключать к Sinatra.

bundle exec derailed bundle:mem

bundle exec derailed bundle:objects

Так можно проследить за потреблением памяти во времени:
bundle exec derailed exec perf:mem_over_time

scout_apm - с ним можно определять какие операции ведут к увеличению потребления памяти приложения.

При расследовании на локальной машине стоит учесть, что если работать с локальными тестовыми выборками данных, то и потребление памяти может оказаться существенно меньше из-за разницы в объеме данных.

Добавлено:
Нашел еще хорошее сравнение инструментов для определения производительности, в нагрузку:
Rails Performance Monitoring Tools Compared
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
KUPIBILET.RU Санкт-Петербург
от 150 000 ₽
On The Spot Development Санкт-Петербург
До 4 000 $
от 3 000 до 4 000 $
01 мар. 2021, в 00:47
300000 руб./за проект
01 мар. 2021, в 00:29
5555 руб./за проект