Приложение Rails случайным образом вылетает с ошибкой Преждевременное завершение заголовков скрипта

Я размещаю приложение Ruby on Rails 2.0.2 на DreamHost. Он находится на сервере Apache 2, работающем поверх Phusion Passenger.

Приложение часто возвращает ошибку 500 «Приложение Rails не удалось запустить должным образом», но в случайные моменты времени. Похоже, это происходит, когда приложение находится под более высокой нагрузкой, хотя я не могу это подтвердить. Он получает только около 2000 просмотров страниц в день, поэтому я не думаю, что нагрузка действительно должна быть проблемой.

Журналы Apache коррелируют эти 500 ответов с ошибкой: «Преждевременное завершение заголовков скрипта». Просто взглянув на логи сегодня в 9 утра, ошибка появляется три или четыре раза в минуту. Это явно недопустимо.

Реже приложение выдает страницу Phusion Passenger с трассировкой стека и ошибкой «Сломана труба».

Журналы Rails не содержат ни одной из этих ошибок.

Это происходит как на промежуточных, так и на действующих сайтах, размещенных на DreamHost, но я не могу воспроизвести это на локальном сервере разработки.

Итак, я предполагаю, что реальный вопрос: С чего начать отладку этой проблемы?


person Schrockwell    schedule 05.05.2009    source источник


Ответы (2)


Оказывается, я просто исчерпал объем памяти на общем сервере DreamHost.

Я запускал несколько приложений Rails под одной учетной записью, многие из них просто для тестирования и создания прототипов. Rails использует много памяти, поэтому я быстро достиг своего распределения. Служба поддержки сказала мне, что «я проверил наши журналы, и за последние три дня он убил один из ваших процессов ruby ​​2325 раз». Упс.

Решение: постарайтесь не запускать Rails в общей среде, если можете. Я собираюсь переключить хотя бы одно из моих приложений на хост VPS.

person Schrockwell    schedule 06.05.2009
comment
Да, это происходило со мной в моем приложении rails сразу после того, как я провел некоторое нагрузочное тестирование приложения PHP на том же сервере, что привело к запуску множества процессов apache php.cgi, что заполнило память. Удалось ли вам найти какие-либо решения по сокращению использования памяти для рельсов на Dreamhost? Спасибо - person adamJLev; 26.05.2010
comment
На самом деле не было никакого способа обойти это. Вы, вероятно, могли бы разместить одно скромно популярное приложение Rails на общем сервере DreamHost. Тем не менее, я переключился на VPS, размещенный на RailsPlayground. С тех пор у меня не было икоты. - person Schrockwell; 27.05.2010
comment
Если вы создадите новую учетную запись пользователя в DH, скажем, для каждого запускаемого приложения rails, будет ли каждая учетная запись иметь собственную память? - person miccet; 10.02.2011
comment
Думаю, да. Кроме того, ваши отдельные учетные записи, вероятно, будут назначены на отдельные серверы (у них сотни), чтобы они не столкнулись с проблемами памяти, конкурирующими друг с другом. Опять же, я повторяю, что выполнение Rails в общей среде доставит вам много головной боли. - person Schrockwell; 11.02.2011

У вас установлена ​​последняя версия пассажира (на момент написания статьи 2.2.2). У меня было несколько ошибок, но большинство (если не все) исчезли после обновления моей пассажирской установки.

Если это не ответ, вы всегда можете попробовать обновить версию rails до 2.3 и посмотреть, сохраняется ли проблема.

person Maran    schedule 05.05.2009
comment
Я сейчас проверяю DreamHost, чтобы узнать, какую версию Passenger они используют. Следующим шагом может стать обновление Rails до 2.3, хотя я не собираюсь исправлять обратную несовместимость. - person Schrockwell; 05.05.2009