在使用Phusion Passenger和Rails时,初始服务器启动速度缓慢

为了跳上Phusion Passenger的旅行车,我们为一个小型的Rails应用程序设置了一个登台服务器来testing事情。

到目前为止它已经非常好用了,它使安装/configuration和部署应用程序变得轻而易举。 问题是我们正在使用的网站不会经常碰到,它似乎closures在后台的服务器。 这意味着当有人进入网站时,他们有一个很长的等待,直到启动一个新的服务器来处理请求。 我们已经通读了文档,尝试了很多不同的设置(智能/智能lv2模式,passengeridletime等),仍然没有find一个真正的解决scheme。

在searchGoogle结果之后,我们无法find有用的信息。 目前,我们有一个cron作业,每隔一段时间发出一个请求,以保持服务器的运行。

是否有其他人遇到这个问题,你有什么build议修复?

发生什么事情是因为超时而导致应用程序和/或ApplicationSpawners被closures。 为了处理您的新请求,Passenger必须启动应用程序的新副本,即使在快速机器上也可能需要几秒钟的时间。 要解决这个问题,可以使用一些Apacheconfiguration选项来保持应用程序的活跃。

具体来说,我在我的服务器上做了什么。 PassengerSpawnMethod和PassengerMaxPreloaderIdleTime是在您的情况下最重要的configuration选项。

# Speeds up spawn time tremendously -- if your app is compatible. # RMagick seems to be incompatible with smart spawning # Older versions of Passenger called this RailsSpawnMethod PassengerSpawnMethod smart # Keep the application instances alive longer. Default is 300 (seconds) PassengerPoolIdleTime 1000 # Keep the spawners alive, which speeds up spawning a new Application # listener after a period of inactivity at the expense of memory. # Older versions of Passenger called this RailsAppSpawnerIdleTime PassengerMaxPreloaderIdleTime 0 # Just in case you're leaking memory, restart a listener # after processing 5000 requests PassengerMaxRequests 5000 

通过使用“智能”产卵模式并closuresPassengerMaxPreloaderIdleTime,Passenger将在任何时候(在启动Apache之后的第一个请求之后)将内存中的应用程序保留1个副本。 个别Application侦听器将从这个副本fork ,这是一个超便宜的操作。 它发生得如此之快,你不能分辨你的应用程序是否产生了一个监听器。

如果你的应用程序与智能衍生产品不兼容,我build议保留一个大的PassengerPoolIdleTime并使用curl和cronjob或者monit或者其他的东西定期点击你的网站,以确保听者保持活跃。

Passenger用户指南是这些和更多configuration选项的真棒参考。

编辑 :如果你的应用程序与智能产卵不兼容,有一些新的选项是非常好的

 # Automatically hit your site when apache starts, so that you don't have to wait # for the first request for passenger to "spin up" your application. This even # helps when you have smart spawning enabled. PassengerPreStart http://myexample.com/ PassengerPreStart http://myexample2.com:3500/ # the minimum number of application instances that must be kept around whenever # the application is first accessed or after passenger cleans up idle instances # With this option, 3 application instances will ALWAYS be available after the # first request, even after passenger cleans up idle ones PassengerMinInstances 3 

所以,如果将PassengerPreStart和PassengerMinInstances结合起来,Passenger将在Apache加载后立即启动3个实例,并且始终保持至less3个实例,所以用户将很less(如果曾经)看到延迟。

或者,如果您已经使用PassengerMaxPreloaderIdleTime 0智能产卵(推荐),则可以添加PassengerPreStart以获得立即启动的额外好处。

非常感谢phusion.nl的英雄!

只要有任何nginx服务器用户在这个问题上磕磕绊绊,“PassengerMaxRequests”和“PassengerStatThrottleRate”指令都不会翻译成nginx。 但其他人做:

 rails_spawn_method smart; rails_app_spawner_idle_time 0; rails_framework_spawner_idle_time 0; passenger_pool_idle_time 1000; 

HTH!

编辑rails_spawn_method在乘客3弃用,而不是使用

 passenger_spawn_method smart; 

一切都很好,直到约会。

你也可以使用PassengerMinInstances:

http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerMinInstances

这可以与PassengerPreStart结合使用

回覆:

 # Additionally keep a copy of the Rails framework in memory. If you're # using multiple apps on the same version of Rails, this will speed up # the creation of new RailsAppSpawners. This isn't necessary if you're # only running one or 2 applications, or if your applications use # different versions of Rails. RailsFrameworkSpawnerIdleTime 0 

只是要添加,可能是有用的。

当前版本中默认的spawn方法是“smart-lv2”,它跳过了框架spawner,所以设置框架spawner超时不会有任何影响,除非你明确地设置spawn方法为“smart”。

来源: http : //groups.google.com/group/phusion-passenger/browse_thread/thread/c21b8d17cdb073fd?pli=1

如果您的主机是共享服务器,就像我的主机一样,您不能更改设置,并且不能使用cron作业。

我也有这个问题,但我无法改变乘客设置,因为我没有写入权限的文件。 我发现一个工具( http://www.wekkars.com ),让我的应用程序快速响应。 也许这也可以成为你的解决scheme。

检查乘客的版本。 这是老版本的RailsS​​pawnMethod <string>

如果是的话(如果我没有记错的话),在所有的configuration指令中用RailsreplacePassenger,或者查找旧的乘客文档以获取更多的细节