Я запускаю приложение Ruby on Rails с Passenger + Apache. Также существует сервер списков рассылки Perl (Sympa), работающий с mod_perl.
У меня есть root и sh доступ к серверу (машина Ubuntu).
В большинстве случаев он работает нормально; у сервера более чем достаточно памяти и дискового пространства для обработки рабочей нагрузки.
Но время от времени (может быть, раз в 3 месяца или около того) какой-то процесс Apache, кажется, «выходит из строя» и начинает безумно расходовать память и процессор. В результате сайт выходит из строя (иногда приходилось делать холодную перезагрузку; просто перезагрузки Apache было недостаточно). Я провел несколько тестов, и мне кажется, что зависшие процессы - это процессы Ruby, что заставляет меня подозревать, что Passenger ведет себя некорректно.
Вот несколько графиков Мунина для последнего "отключения" (которое только что произошло)
Я с подозрением отношусь к процессу Ruby (Passenguer). Однако я не могу точно определить условия, запускающие «дикий процесс» (я только размещаю приложение, а не разрабатывал его). Хотя было бы неплохо, может быть проще просто «убить процесс зависания».
Я хотел бы знать, есть ли способ «автоматически убить» процессы, которые занимают слишком много памяти или процессора. Есть ли какой-либо модуль или флаг конфигурации Apache, который решает эту проблему?
РЕДАКТИРОВАТЬ: до сих пор я пробовал Apache RLimitCPU, RLimitMEM и RLimitNPROC безрезультатно - похоже, что Passenger невосприимчив к этим настройкам. Я почти уверен, что проблема сейчас в Passenger, поэтому я повторно помечаю и переписываю части этого вопроса.
ulimits (настроенный через /etc/security/limits.conf или просто путем запуска ulimit перед запуском потенциально опасного двоичного файла), вероятно, являются решением этой проблемы.