Процессы в стойке, занимающие процессор под 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 секунд, в зависимости от сложности вашего приложения, поэтому у вас обычно будет несколько запущенных приложений, даже если они не обслуживают запросы.