Обычно это не утечки памяти, а раздувание памяти из-за бездумного программирования: чтение огромного 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
Добавлено:
Еще простой способ уменьшить потребление памяти:
Добавить гем
gem 'jemalloc'