发生的情况是您的Application和/或ApplicationSpawners由于超时而关闭。要处理您的新请求,Passenger必须启动您的应用程序的新副本,即使在高速计算机上,这也可能需要花费几秒钟的时间。要解决此问题,可以使用一些Apache配置选项来保持您的应用程序正常运行。
这是我在服务器上所做的具体工作。PassengerSpawnMethod和PassengerMaxPreloaderIdleTime是您所处情况中最重要的配置选项。
PassengerSpawnMethod smart
PassengerPoolIdleTime 1000
PassengerMaxPreloaderIdleTime 0
PassengerMaxRequests 5000
通过使用“智能”生成模式并关闭PassengerMaxPreloaderIdleTime,Passenger将始终在内存中保留您的应用程序的1个副本(在启动Apache之后的第一个请求之后)。Application
将fork
从此副本中获得个人侦听器,这是一个超低价的操作。它发生得如此之快,以至于您无法判断您的应用程序是否必须生成监听器。
如果您的应用与智能生成不兼容,我建议您保留一个较大的PassengerPoolIdleTime,并使用curl和cronjob或monit或其他方法定期访问您的网站,以确保侦听器保持活动状态。
《乘客用户指南》是这些以及更多配置选项的出色参考。
编辑:如果您的应用与智能生成不兼容,则有一些非常不错的新选项
PassengerPreStart http://myexample.com/
PassengerPreStart http://myexample2.com:3500/
PassengerMinInstances 3
因此,如果结合使用PassengerPreStart和PassengerMinInstances,Passenger将在apache加载后立即启动3个实例,并且始终保持至少3个实例启动,因此您的用户很少(如果有)会看到延迟。
或者,如果您已经使用了智能生成(推荐)PassengerMaxPreloaderIdleTime 0
,则可以添加PassengerPreStart
以获取立即启动的其他好处。
非常感谢phusion.nl的英雄们!