Webrick反应很慢。 如何加快速度?

我有一个Rails应用程序,我在我的服务器上运行。 当我转到远程桌面并尝试加载应用程序时,服务器花了3-4分钟的时间用简单的HTML页面进行响应。 但是,当我在服务器上本地加载页面时,页面显示在一秒钟之内。 我尝试从远程桌面ping服务器,并在合理的时间内ping成功。

在我安装了Oracle的基本客户端和SQLPLUS之后,这似乎已经开始了。 我应该怀疑Oracle吗? 有没有人遇到类似的东西?

在这里也有同样的问题(甚至一年后)。 在Linux下你必须做到以下几点:

find文件/usr/lib/ruby/1.9.1/webrick/config.rb并编辑它。

更换线路

:DoNotReverseLookup => nil, 

 :DoNotReverseLookup => true, 

重新启动webrick,它会像一个魅力:)

有同样的问题。 对我来说, 这个职位举行了解决scheme。 如果你在Ubuntu上,停止(或卸载) avahi-daemonservice avahi-daemon stop守护进程。

Webrick现在感觉非常快。

这个问题在Rails灯塔有一个旧的报告 ,但是,从那以后,Ruby-on-Rails已经把他们的门票转移到了github ; 不幸的是,这个老问题依然存在。

但请注意,如果您实际上使用 avahi-daemon进行某些操作(例如在您的networking上查找打印机和扫描仪) ,则不再有效。

刚刚有同样的问题。 该

 ... :DoNotReverseLookup => true, ... 

也为我做了诡计。 以防万一你在rvm下运行ruby,这里是要走的道路:

 ~/.rvm/rubies/ruby-<version>/lib/ruby/<version>/webrick/config.rb 

“瘦”现在是一个很好的select在本地运行 和Heroku上

在Heroku上:https://devcenter.heroku.com/articles/rails3#webserver

网站: http : //code.macournoyer.com/thin/

您可以通过放入Gemfile在本地使用它:

 gem "thin" 

…然后运行软件包并使用thin startrails s启动服务器。

更新Heroku

现在Thin被认为是Heroku的不错select。 更多信息在这里:

https://blog.heroku.com/archives/2013/4/3/routing_and_web_performance_on_heroku_a_faq

他们的推荐:

在JRuby上切换到像Unicorn或Puma这样的并发web后端,这允许dynopipe理自己的请求队列,避免阻塞长请求。

我有一个模糊的类似的问题,通过VPN访问WEBrick服务器时就performance出来了。 请求将花费很长时间,其中大部分没有任何事情发生在电线上。 既然mongrelthin gems都不能在Windows上使用Ruby1.9,并且没有办法使自己陷入从源代码编译的东西,我需要坚持使用WEBrick。

解决方法是在创buildWEBrick服务器时将config参数DoNotReverseLookup设置为true

 server = HTTPServer.new {:DoNotReverseLookup => true, ...} 

您可以使用Apache或安装Thin 。 在你的Gemfile中:gem'thin gem 'thin'

或者您可以检查轨道的Web服务器列表。

试图在1.8.7上使用webrick来做到这一点,并找不到configuration改变。 然而,你可以使用的作弊是添加到运行webrick的服务器的主机文件,它试图反向查找的IP地址..

我经历了与Sinatra频繁的10秒延迟。 这段代码为我解决了。

把这个添加到你的app.rb文件的顶部附近

 class Rack::Handler::WEBrick class << self alias_method :run_original, :run end def self.run(app, options={}) options[:DoNotReverseLookup] = true run_original(app, options) end end 

看源码

这是一个古老的问题和答案线程,帮助我解决了本地开发虚拟机上的:DoNotReverseLookup问题,并希望添加其他信息。 这个网页解释了 Ruby核心中的回归错误 ,导致这个问题出现了一些; 重点是我的; 所有这一切的一小部分是有一个GitHub pull请求的Ruby核心修复,希望它将被批准和合并在一个即将发布的Ruby:

经过几个小时的故障排除,事实certificate,这是! 显然,在从1.8.6到2.0.0的Ruby标准库演化过程中,WEBrick获得了一个新的configuration选项:DoNotReverseLookup默认设置nil:DoNotReverseLookup 。 然后,深入了解WEBrick的请求处理代码,它将传入的连接套接字实例上的do_not_reverse_lookup标志设置为config[:DoNotReverseLookup]的值。 由于这个值是nil ,这是错误的,效果和设置为false相同,覆盖全局的Socket.do_not_reverse_lookup标志。 因此,除非您的WEBrickconfiguration中包含: DoNotReverseLookup => true ,否则反向DNS查找将始终发生在每个新连接上,可能会造成严重的延迟。

与此发现相关的是来自作者的GitHub拉取请求,提出如何修复Ruby WEBrick源代码中的问题: 修复WEBrick中的回归错误:DoNotReverseLookupconfiguration选项实现#731

请求中概述的解决scheme是将lib/webrick/server.rb第181行改为:

 sock.do_not_reverse_lookup = config[:DoNotReverseLookup] 

对此:

 unless config[:DoNotReverseLookup].nil? 

如果有人绊倒了这个备受关注的问题/回答线程,并且对在Ruby核心中解决这个问题的进展感兴趣,那么在这里共享。 希望这个pull会被合并,或者在下一个Ruby版本中以某种方式处理相关的问题; 也许2.1.6?

这是一个非常晚的答案,但是我花了很大一部分的时间用Vagrant运行的Rails来debugging这个问题。 改变反向DNS查询实际上并没有改善请求时间。 两件事的组合使我的页面加载从开发模式的约20秒到约3秒:

更换WEBrick与杂种。 我不得不使用预发布版本,否则将不会安装:

 sudo gem install mongrel --pre 

然后将其添加到我的Gemfile dev:

 group :test, :development do gem 'mongrel' end 

然后启动我的服务器:

 rails server mongrel -e development 

那几秒钟的时间缩短了5或6秒,但是速度还是非常慢的。 这是蛋糕上的糖霜 – 把这个也加到Gemfile中:

 group :development do gem 'rails-dev-boost', :git => 'git://github.com/thedarkone/rails-dev-boost.git' end 

在ruby 1.8.x webrick中没有DoNotReverseLookup选项。 解决的办法是把:

 Socket.do_not_reverse_lookup = true 

在你的脚本开始的某个地方。

来源: WEBrick和Socket.do_not_reverse_lookup:一个故事在两个行为

在我可能很less见的情况下,它在我刷新了我的iptables后工作,这没有任何副作用,因为我没有任何自定义规则(只是默认的Ubuntu允许所有):

 sudo iptables -F