У меня есть приложение Rails 2.3.2, работающее на Apache с Passenger, и в последнее время начали происходить самые странные вещи.
Время от времени приложение просто полностью прекращает обработку запросов, и все они будут выполнять резервное копирование до истечения времени ожидания. Единственный выход - перезапуск Apache. Система находится под относительно небольшой нагрузкой, пока это не произойдет, после чего она вообще не будет загружена.
Я понимаю, что это не так уж и много, но как я могу понять, что вызывает это? Следует отметить, что включена глобальная организация очередей; Рубин ruby-enterprise-1.8.6-20080610; и Passenger - это версия, которая поставляется с вышеупомянутым Ruby Enterprise Edition.
Один ресурс, который я нашел полезным, это раздел руководства пользователя для пассажиров где об этом говорят:
Если один из ваших экземпляров приложения завис (перестал отвечать), вы можете выяснить, где он завис, уничтожив его с помощью SIGABRT. Это приведет к тому, что приложение вызовет исключение с обратной трассировкой.
Поскольку вы не знаете, что вызывает проблему, я полагаю, вам следует хотя бы убедиться, что вы все регистрируете. Последние несколько записей в журнале перед сбоем могут выявить вашего виновника.
Возможно, проблема в коде. Что ж, чтобы выяснить это, вы можете развернуть очень простое приложение rails, так что код не будет проблемой, но с точно такой же настройкой (apache + пассажира + REE), и отправить ему запросы с небольшим скриптом ruby на ночь. Запустите его на своем персональном компьютере и посмотрите, не вылетит ли он. Конечно, вы должны быть уверены, что настроили вашу среду точно так же.
Также возможно, что вам не хватает памяти, хотя это зависит от специфики вашего приложения и системы. Эта почта приходит в голову. Вы можете попробовать изменить настройки управления памятью REE, как описано в сообщении, чтобы увидеть, решит ли он проблему (в любом случае не помешает попробовать).
Я бы посоветовал опубликовать этот вопрос и на stackoverflo, если вы еще этого не сделали.
Может быть что-то в коде? Что-то ожидает ввода, что блокирует поток и заставляет несколько процессов просто ждать?
У меня было то же самое, я размещал несколько приложений rails 1.2.3 с использованием apache + fastcgi в течение года без единого сбоя, затем я переключился на новый сервер с apache +senger, и они случайно вылетели. Apache просто перестает отвечать.
Я до сих пор использовал monit, чтобы сохранить его, и пока что мой ответ заключался в том, чтобы перейти на новый сервер (виртуальный) с nginx вместо apache и с последним пассажиром и rubyee. Все идет нормально!
Сервер apache все еще дает сбой, и теперь он обслуживает только сайт ублюдков, поэтому я предполагаю, что это какая-то проблема с apache или моей конкретной конфигурацией. Попробуйте nginx, если можете :)
Другой возможный ответ: известно, что RMagick вызывает проблемы с Passenger и умным нерестом.
Эта ветка из списка рассылки Passenger есть дополнительная информация:
Похоже, проблема могла быть исправлена в REE 20090113, но я думаю, что это происходит реже. Этим утром я обнаружил замороженный процесс, работающий с пассажиром 2.0.6 и REE 20090113 на 64-битной версии Centos 4.