Процессы в стойке, занимающие процессор под Passenger

У меня есть сайт Spree со следующим стеком:

  • Nginx 1.0.8
  • Пассажир 3.0.9
  • Ruby 1.9.2-p290
  • Стойка 1.3.6
  • Рельсы 3.1.4
  • Шпрее 0.70.5

Недавно я обновил Spree 0.70.3, что также привело к обновлению Deface с 0.7.x до 0.8.0. С тех пор все было очень нестабильно.

Недавно мы видели некоторые процессы, загружающие процессор, которые нагружают сервер и приводят к полной остановке. Это процессы Rack, и похоже, что Passenger запускает их; они принадлежат site-runner пользователь, непривилегированный пользователь, которому принадлежит код приложения. (Пассажир автоматически запускает код сайта как пользователь, которому он принадлежит.) Если я перезапущу Nginx и уничтожу запущенные процессы, это поможет какое-то время, но в конечном итоге подобные процессы возвращаются и снова приводят к сбоям.

ETA: я сейчас смотрю на passenger-status а также passenger-memory-stats которые предполагают, что это процессы подачи заявок Пассажира. Если он убегает или зависает, проблема с моим приложением.

Какой мой лучший вариант для выяснения, где это висит?

1 ответ

Решение

Процессы в стойке - это серверы приложений, на которых работает код вашего сайта, а не Passenger. Я подозреваю проблемы с недавними обновлениями и всеми обычными поисками неисправностей вокруг этого. Вот как выглядит запрос в вашей системе.

user -> nginx -> passenger -> Rack process -> generates page

В вашей системе будет несколько процессов Rack, поскольку каждый из них однопоточный и может обрабатывать только один запрос за раз. Работа Пассажира заключается в том, чтобы прокси-запросы и отправлять их в процессы Rack и запускать / останавливать / перезапускать эти процессы Rack по мере необходимости. Обычно процесс Rack запускается в течение 5-45 секунд, в зависимости от сложности вашего приложения, поэтому у вас обычно будет несколько запущенных приложений, даже если они не обслуживают запросы.

Другие вопросы по тегам