我的Rails应用程序的第一个请求(工作会话)总是滞后。切换到生产模式 没有用。
我使用mongrel,其他请求以可接受的速度处理。
如何让它更快?
此致
答案 0 :(得分:2)
可能是因为你是:
要求并加载一些 插件和宝石
建立与外部的连接 服务(然后缓存)
缓存您自己的网页 在第一个请求之后发生,除非 你'加热'缓存
其中任何一个都不可避免地会增加第一个请求的响应时间。
答案 1 :(得分:1)
这可能与我们的应用程序第一次在Websphere中启动时需要很长时间的原因相同。
在安装新版本的应用程序(或重新启动WAS)时,WAS必须做很多初始工作来设置容器。
我们使用的解决方法是修改安装脚本和WAS启动脚本,以便它们在运行时自动浏览到应用程序(主页面和选定的其他页面)。这样,第一次真正访问它是全速的。
我不知道如何使用Ruby或者甚至是否可能。你必须想出那个。
答案 2 :(得分:1)
如果您在处理第一个请求时发布了日志的内容,那么也许我们可以弄清楚是什么让它变得如此之慢。例如,这是我的日志,因为第一个用户访问该站点
Booting Mongrel (use 'script/server webrick' to force WEBrick)
Rails 2.1.0 application starting on http://0.0.0.0:3000
Debugger enabled
Call with -d to detach
Ctrl-C to shutdown server
** Starting Mongrel listening at 0.0.0.0:3000
** Starting Rails with development environment...
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/mime_type.rb:66: warning: already initialized constant CSV
** Rails loaded.
** Loading any Rails specific GemPlugins
** Signals ready. TERM => stop. USR2 => restart. INT => stop (no restart).
** Rails signals registered. HUP => reload (without restart). It might not work well.
** Mongrel 1.1.5 available at 0.0.0.0:3000
** Use CTRL-C to stop.
Processing SessionsController#new (for 127.0.0.1 at 2009-05-26 12:26:00) [GET]
Session ID: de2acf074759026e1ed6205724f547a9
Parameters: {"action"=>"new", "controller"=>"sessions"}
Rendering sessions/new
Completed in 0.00587 (170 reqs/sec) | Rendering: 0.00298 (50%) | DB: 0.00092 (15%) | 200 OK [http://localhost/]
我认为170 reqs / sec适用于我们的应用程序,但其他人可能会觉得这很慢。您可以从统计信息中看到rails提供了所需的一半时间用于呈现响应 - 在这种情况下为登录屏幕生成HTML。如果此请求需要很长时间,我的第一个停靠点将是与登录屏幕关联的视图和帮助程序。
如果你的系统需要很长时间才能在第一个请求中初始化,那么为什么不偷偷摸摸地编写你自己的启动程序,它首先运行rails然后在via curl中发送一个假请求。这样,您的用户永远不会看到问题。
克里斯
答案 3 :(得分:1)
我猜你使用Ferret进行全文搜索?可能是雪貂连接需要一段时间来初始化?当我检查你的日志时,似乎db和视图都需要正常的时间,但总数仍然是10秒。所以我必须是其他的东西,这就是为什么我猜测雪貂可能是问题。
答案 4 :(得分:0)
也许您需要调整apache conf中的PassengerPoolIdleTime
var。将其设置为0,永远不会停止导轨过程。