Те, що відбувається, полягає в тому, що ваш додаток та / або програма розширення додатків вимикаються через час очікування. Щоб обробити ваш новий запит, пасажир повинен запустити нову копію вашої програми, що може зайняти кілька секунд, навіть на швидкій машині. Щоб вирішити проблему, існує кілька варіантів конфігурації Apache, якими ви можете підтримувати свою програму.
Ось конкретно, що я робив на своїх серверах. PassengerSpawnMethod та PassengerMaxPreloaderIdleTime - варіанти конфігурації, які є найбільш важливими у вашій ситуації.
PassengerSpawnMethod smart
PassengerPoolIdleTime 1000
PassengerMaxPreloaderIdleTime 0
PassengerMaxRequests 5000
Використовуючи "розумний" режим нересту та вимикаючи PassengerMaxPreloaderIdleTime, Passenger постійно зберігатиме в пам'яті 1 копію вашої програми (після першого запиту після запуску Apache). З цієї копії Application
буде fork
видалено окремих слухачів , що є наддешевою операцією. Це відбувається так швидко, що ви не можете зрозуміти, чи доводилося вашому додатку створювати слухач.
Якщо ваш додаток несумісний із розумним нерестом, я рекомендую зберігати великий PassengerPoolIdleTime і періодично відвідувати ваш сайт, використовуючи curl та cronjob, monit або щось інше, щоб слухач залишався живим.
Passenger Керівництво користувачем є дивовижною посиланням на ці та додаткові параметри конфігурації.
редагувати : якщо ваш додаток несумісний із розумним нерестом, є кілька нових опцій , які дуже приємні
PassengerPreStart http://myexample.com/
PassengerPreStart http://myexample2.com:3500/
PassengerMinInstances 3
Отже, якщо ви поєднаєте PassengerPreStart та PassengerMinInstance, Passenger оберне 3 екземпляри відразу після завантаження apache і завжди буде тримати щонайменше 3 екземпляри, тому ваші користувачі рідко (якщо взагалі коли-небудь) бачать затримку.
Або, якщо ви використовуєте розумний нерест (рекомендується) з PassengerMaxPreloaderIdleTime 0
уже, ви можете додати, PassengerPreStart
щоб отримати додаткові переваги від негайного запуску.
Велике спасибі героям на phusion.nl !