【问题标题】:Why is WEBrick so slow to process my request on OSX?为什么 WEBrick 在 OSX 上处理我的请求这么慢?
【发布时间】:2012-03-28 00:09:37
【问题描述】:

我使用 rails new demo 在 Rails 3.2.2 中创建了一个基本的演示应用程序。然后,我添加了一个控制器,其中包含一个显示视图的方法。当我刷新时,平均需要 20 多秒来呈现页面。这显然使开发变得不可能,所以我试图弄清楚为什么以及如何解决这个问题。

我应该提一下,我使用的是 4GB RAM 和 SSD 驱动器的 Macbook Air 2011,所以我认为我的硬件与问题无关。

运行 OSX Lion、Rails 3.2.2 和 Ruby 1.9.3。通过 WEBrick 在本地运行

更新

我所做的唯一更改是运行rails generator Say hello goodbye

然后我修改了hello.html.erb 说 Hello World!

这是我的 gemfile:

source 'https://rubygems.org'

gem 'rails', '3.2.2'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'sqlite3'

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

输入rails server启动服务器

更新 2

在终端窗口中注意到了这个奇怪的现象。从开始 GET 到第一个资产上的 GET 需要 8 秒。

Started GET "/say/hello" for 127.0.0.1 at 2012-03-10 22:49:12 -0700
Processing by SayController#hello as HTML
  Rendered say/hello.html.erb within layouts/application (0.1ms)
Completed 200 OK in 5ms (Views: 5.3ms | ActiveRecord: 0.0ms)


Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2012-03-10 22:49:20 -0700
Served asset /application.css - 200 OK (0ms)

然后再等待 4 秒用于下一个资产..

Started GET "/assets/say.css?body=1" for 127.0.0.1 at 2012-03-10 22:49:24 -0700
Served asset /say.css - 200 OK (0ms)

更新 3.1

我已将问题追溯到 WEBrick。我安装并使用了thin,我的通话速度和预期的一样快。万一 WEBrick 问题是更大问题的征兆,追踪问题可能仍然是件好事。

【问题讨论】:

  • 没有理由发生这种情况。但是如果没有更多信息,这是不可能调试的。可能是您添加的代码、您的 Gemfile 以及您用来启动应用程序的方法。
  • 已更新。我真的什么都没做。我能看到的唯一不寻常的事情是,当我运行 rake 时,它​​说我的 JavaScript 运行时是 Node.js (V8)
  • 日志中有什么奇怪的东西吗(log/development.log)?你有任何奇怪的防火墙/互联网设置吗?没有理由这么慢,甚至应用启动也不应该是 20 秒。
  • 看到一些非常奇怪的时间点......更新了。
  • 没有我能想到的防火墙/互联网/代理设置(因为我没有改变任何东西),这都是本地的......是的,我有点想这是规范..我无法想象有很多人在这些条件下发展:D

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

我推测每次都会进行某种资产编译或复制。

我会尝试更改资产编译作为测试 -

在 Rails 3.1 中,资产管道默认启用。可以在 config/application.rb 中禁用它,方法是将此行放在应用程序类定义中: config.assets.enabled = false

我很想知道您是否有任何大型(或大量)图像或其他媒体资产。

【讨论】:

  • 我找到了现有的设置并将其设置为 false。重新启动服务器以确定但仍需要 20 秒。
  • 除了 Rails 新应用程序中存在的内容之外,也没有任何资产。
  • 好的,让我们看看操作系统。您使用的是哪个操作系统?什么样的机器?它几岁了?我也喜欢“创意技术专家”“尝试”在生产模式下运行它的想法。在此期间服务器正在运行的终端窗口中是否发生了任何事情?
  • 全新的 Macbook Air 和带有所有当前补丁的最新 Lion。
【解决方案2】:

+1 用于资产预编译问题

我将尝试回答您如何解决它(在找到此解决方案之前我遇到了同样的问题):

group :development do
    gem 'rails-dev-tweaks', '~> 0.5.1' #nice gem to speedup development process
end

对我帮助很大

使用passenger+nginx进行开发也是不错的方法(对我来说,它对webrick的页面渲染速度提高了大约30-40%)

希望对你有帮助

【讨论】:

  • 尝试了开发调整,但它们不起作用。资产实际上在我的日志中显示为 0ms 来处理。我可能应该发布一个要点..
【解决方案3】:

不是真正的答案,但可能有助于隔离问题:

尝试使用不同的服务器,例如“thin”或“pow”http://pow.cx/(顺便说一句:pow 太棒了!,并考虑安装powder gem,它提供了不错的命令行工具。) Pow 非常易于安装。

另外,使用 Activity Monitor 应用程序检查您的内存利用率 - 4GB 听起来很多,但它很快就会用完。但是我运行的是相同的环境并且没有问题。

我不认为这是一个资产编译问题——对于一个非常干净的 Rails 应用程序,不需要进行大量编译。但是时间有点糟糕——也许检查一下在等待期间哪个进程正在占用 CPU(或者磁盘)。您可以通过在 application.rb 中设置 config.assets.enabled = false 来排除资产管道。

要检查的另一件事:您是否使用最新的 ruby​​ 1.9.3 - 我在 1.9.3-p0 上看到奇怪的东西,现在正在使用 1.9.3-p125,一切都很好。

还有一件事要检查:在命令行中使用curlwget 分别从资产本身请求页面。

哦,你使用 Time Machine 吗?我的机器在运行时有时会变得非常笨拙。 不应该 SSD 的问题,但是......谁知道呢。

【讨论】:

  • 战俘+1。如果你不介意放弃 80 端口,那么 Pow 是很长一段时间内发生在 Rails 上的最好的事情。
【解决方案4】:

我遇到了类似的问题,但我不确定该解决方案是否也适用于您。我的问题基本上与不需要的反向查找有关。看看这个问题,因为它可能会有所帮助:Webrick is very slow to respond. How to speed it up?

【讨论】:

    【解决方案5】:

    使用thin 是否一样慢?

    在你的 Gemfile..

    gem 'thin'
    

    我开始使用 Thin 来确保我与我的生产环境相匹配,并发现它更快一些(不过,我从未见过像 20 秒这样慢的东西......)

    【讨论】:

      【解决方案6】:

      我遇到了同样的问题...有人找到解决方案,所以我切换到 Mongrel。

      Here is the link with the instructions

      【讨论】:

        【解决方案7】:

        WEBrick 默认对连接的 IP 进行反向 DNS 查找。换句话说,它试图查看您的 IP 地址是否与域名相关联。这是不必要的,而且耗时太长,因此您可以禁用它。

        打开文件“l/ruby/lib/ruby/1.9.1/webrick/config.rb”并找到带有“:DoNotReverseLookup => nil”的行。 将 nil 更改为 true。

        享受吧!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-30
          • 2011-04-22
          相关资源
          最近更新 更多