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-daemon
。 service 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 start
或rails 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出来了。 请求将花费很长时间,其中大部分没有任何事情发生在电线上。 既然mongrel
和thin
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