gpt4 book ai didi

ruby-on-rails - 使用 Phusion 乘客和 Rails 时初始服务器启动缓慢

转载 作者:行者123 更新时间:2023-12-01 23:13:26 24 4
gpt4 key购买 nike

为了跟上 Phusion Passenger 的潮流,我们为一个小型 Rails 应用程序设置了一个临时服务器来进行测试。

到目前为止,它使用起来非常好,它使安装/配置和部署应用程序变得轻而易举。问题是我们使用的站点并不经常被访问,而且它似乎在后台关闭了服务器。这意味着当有人访问该站点时,他们需要等待很长时间才能启动新服务器来处理请求。我们通读了文档,尝试了很多不同的设置(智能/智能 lv2 模式、passengeridletime 等),但仍然没有找到真正的解决方案。

在谷歌搜索结果后,我们无法真正找到有用的信息。目前,我们有一个 cron 作业,它经常发出请求以尝试保持服务器运行。

有没有其他人遇到过这个问题,你有什么修复建议吗?

最佳答案

发生的情况是您的应用程序和/或 ApplicationSpawner 由于超时而关闭。为了处理您的新请求,Passenger 必须启动您的应用程序的新副本,这可能需要几秒钟的时间,即使在快速的机器上也是如此。要解决此问题,您可以使用一些 Apache 配置选项来使应用程序保持事件状态。

这是我在服务器上所做的具体工作。在您的情况下,PassengerSpawnMethod 和PassengerMaxPreloaderIdleTime 是最重要的配置选项。

# 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

通过使用“智能”生成模式并关闭PassengerMaxPreloaderIdleTime,Passenger 将始终在内存中保留一份应用程序副本(在启动Apache 后的第一个请求之后)。个人 Application听众将是 fork ed from this copy,这是一个 super 便宜的操作。它发生得如此之快,您无法判断您的应用程序是否必须生成监听器。

如果您的应用程序与智能生成不兼容,我建议保留一个大的PassengerPoolIdleTime 并定期使用curl 和cronjob 或monit 或其他方式访问您的站点,以确保监听器保持事件状态。

Passenger User Guide是这些和更多配置选项的绝佳引用。

编辑 :
如果您的应用与智能生成不兼容,还有一些 新选项 非常好
# 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 个实例,并且将始终保持至少3 个实例运行,因此您的用户很少(如果有的话)看到延迟。

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

非常感谢 phusion.nl的英雄们!

关于ruby-on-rails - 使用 Phusion 乘客和 Rails 时初始服务器启动缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/853532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com