Предыдущая конфигурация:
- nginx (главный proxy), который раздает трафик в
- haproxy (ради возможности балансировать по нагрузке), который распределяет нагрузку по нескольким webapp-серверам
- с 16-ю mongrelами на каждом
Проблемы:
- «Утекающая» память, периодический out of memory на серверах, лечится только перезапуском mongrelов.
- Запросы, занимающие десятки секунд из-за неверной балансировки (в нагруженный mongrel все-таки попадает несколько «тяжелых» запросов).
- Сложность управления кластером монгрелов – постоянные проблемы при перезапуске, «не стартующие» mongrelы и т.п.
Новая конфигурация:
- nginx (proxy) остался
- Phusion Passenger + Ruby Enterprise Edition на каждой машине.
Результат:

Комментарий: переход на Phusion Passenger на Week 39, объем занятой памяти – это белая область на графике, растущая сверху вниз. До перехода на Passenger объем свободной памяти стремительно уменьшался, иногда доходя до нуля, после перехода остается более-менее стабильным. Использование CPU осталось на прежнем уровне (как и ожидалось).
После перехода исчезли запросы, которые по непонятным причинам занимали десятки секунд – время выполнения коррелирует со сложностью запроса.
Так что если вы еще не переключились, мы идем к вам
P.S. Отдельное спасибо glebpom за подсказку.
Все ли дело в PP ? Может достаточно было бы в старой конфигурации REE и Thin место монгрелов?
Вполне может быть, не пробовали. Попробуете – поделитесь результатами, пожалуйста.
Но, как известно, Phusion Passenger + REE лучше живут вместе, т.к. написаны одними людьми и REE экономия по памяти имеет смысл только при способе forkов в PP.
А что у тебя за проекты на RoR? Я тоже перевел все сайты на такую связку, у меня правда это продиктовано тем, что куча проектов заказчиков работает на VPS.
Я думаю, тут легко догадаться – Qik.com.