代码之家  ›  专栏  ›  技术社区  ›  tsdbrown

使用phulsion passenger和rails时服务器启动缓慢

  •  86
  • tsdbrown  · 技术社区  · 16 年前

    为了跳上普锐斯乘客的旅行车,我们为一个小的Rails应用程序设置了一个登台服务器来进行测试。

    到目前为止,它的使用非常好,它使安装/配置和部署应用程序变得轻而易举。问题是我们正在使用的站点不会经常受到攻击,而且它似乎会在后台关闭服务器。也就是说,当有人访问该站点时,他们会等待很长时间,直到它启动新的服务器来处理请求。我们已经阅读了文档,尝试了很多不同的设置(smart/smart-lv2模式、passengeridletime等),但仍然没有找到真正的解决方案。

    仔细研究谷歌的搜索结果后,我们真的找不到有用的信息。目前,我们有一个cron作业,它每隔一段时间发出一个请求,试图保持服务器的运行。

    是否有其他人遇到此问题,您是否有任何修复建议?

    7 回复  |  直到 11 年前
        1
  •  115
  •   John Douthat    11 年前

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

    以下是我在服务器上所做的具体操作。passengersPawMethod和passengerMaxReloaderIdetime是在您的情况下最重要的配置选项。

    # 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
    

    通过使用“智能”生成模式并关闭PassengerMaxReloaderIdetime,乘客将始终在内存中保存应用程序的1个副本(在启动Apache后的第一个请求之后)。个人 Application 听众将 fork 这是一个非常便宜的操作。它发生得如此之快,以至于你无法判断你的应用程序是否必须产生一个监听器。

    如果你的应用程序与智能产卵不兼容,我建议你保持一个大的过路人空闲时间,并定期使用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
    

    因此,如果将passengerRestart和passengerMinInstances结合使用,那么在Apache加载之后,passenger将立即旋转3个实例,并且始终保持至少3个实例处于上升状态,因此用户很少(如果有)看到延迟。

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

    多亏了 phusion.nl !

        2
  •  39
  •   Pritesh Jain    12 年前

    如果有任何nginx服务器用户遇到这个问题,那么“passengermax请求”和“passengerstatthrottlerate”指令都不会转换为nginx。然而,其他人:

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

    嗯!

    编辑 rails_spawn_method 乘客3中不推荐使用 代替使用

    passenger_spawn_method smart; 
    

    其他的一切都很好。

        3
  •  4
  •   Josh    14 年前

    您还可以使用PassengerMinInstances:

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

    这可以与PassengerRestart结合使用

        4
  •  2
  •   Shuoling Liu    16 年前

    重新:

    # 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
    

    只需添加一些有用的内容。

    当前版本中的默认生成方法 是“smart-lv2”,它跳过框架生成器,因此设置 框架生成器超时无论如何都不会生效,除非 显式地将Spawn方法设置为“smart”。

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

        5
  •  1
  •   tim inman    16 年前

    如果您的主机是共享服务器(如我的),那么您不能更改设置,只能执行cron作业。

        6
  •  1
  •   SteenhouwerD    13 年前

    我也有这个问题,但我无法更改乘客设置,因为我没有写入此文件的权限。我找到一个工具( http://www.wekkars.com )这使我的应用程序响应迅速。也许这也是一个解决方案。

        7
  •  0
  •   j0k gauthamp    12 年前

    检查乘客版本。这是铁路当铺法 <string> 对于旧版本。

    如果是(如果我记得正确),在所有配置指令中用轨道替换乘客,或者查找旧乘客文档了解更多详细信息

    推荐文章