我有一个正在服务器上运行的Rails应用程序。当我进入远程桌面并尝试加载应用程序时,服务器会花费3-4分钟的时间来响应简单的HTML页面。但是,当我在服务器上本地加载页面时,该页面仅会显示一秒钟。我尝试从远程桌面ping服务器,并且在合理的时间内ping操作成功。
在我安装了Oracle的基本客户端和SQLPLUS之后,这一切似乎已经开始。我应该怀疑甲骨文吗?有没有人经历过类似的事情?
我有一个正在服务器上运行的Rails应用程序。当我进入远程桌面并尝试加载应用程序时,服务器会花费3-4分钟的时间来响应简单的HTML页面。但是,当我在服务器上本地加载页面时,该页面仅会显示一秒钟。我尝试从远程桌面ping服务器,并且在合理的时间内ping操作成功。
在我安装了Oracle的基本客户端和SQLPLUS之后,这一切似乎已经开始。我应该怀疑甲骨文吗?有没有人经历过类似的事情?
Answers:
在这里有同样的问题(甚至一年后)。在linux下,您必须执行以下操作:
查找文件/usr/lib/ruby/1.9.1/webrick/config.rb并进行编辑。
更换线
:DoNotReverseLookup => nil,
与
:DoNotReverseLookup => true,
重新启动webrick,它将像魅力一样起作用:)
有同样的问题。对我来说,这个职位保留了解决方案。如果您使用的是Ubuntu,请停止(或卸载)avahi-daemon
。service avahi-daemon stop
停止守护程序。
Webrick现在感觉非常快。
这个问题在Rails Lighthouse中有一个旧的报告,但是从那时起,Ruby-on-Rails已将他们的票移到了github上。不幸的是,这个老问题仍然存在。
但是请注意,如果您实际使用 avahi-daemon
某些东西(例如在网络上查找打印机和扫描仪),将无法再使用。
只是有同样的问题。的
...
:DoNotReverseLookup => true,
...
也为我做了把戏。以防万一,您在rvm下运行ruby,这是要走的路:
~/.rvm/rubies/ruby-<version>/lib/ruby/<version>/webrick/config.rb
现在,“ Thin”是在本地运行两者的绝佳选择 在Heroku上:
网址:http: //code.macournoyer.com/thin/
您可以通过在Gemfile中放入本地文件来使用它:
gem "thin"
...,然后运行bundle并使用thin start
或启动服务器rails s
。
Heroku更新
现在,Thin被认为是Heroku 的错误选择。此处有更多信息:
https://blog.heroku.com/archives/2013/4/3/routing_and_web_performance_on_heroku_a_faq
他们的建议:
切换到并发Web后端,例如JRuby上的Unicorn或Puma,这将使dyno可以管理自己的请求队列并避免阻塞长请求。
gem install thin
。请参见sinatrarb.com/intro.html 。建议也运行gem install Thin,Sinatra将在可用的情况下进行安装。编辑:极大的性能改进。从1.3s到0.05s。
试图在1.8.7上使用webrick进行此操作,但找不到要更改的配置。但是,您可以使用的一种作弊方式是将正在尝试反向查找的IP地址添加到运行webrick的服务器的hosts文件中。
这是一个古老的问答线程,可帮助我:DoNotReverseLookup
在本地开发虚拟机上解决此问题,并希望添加其他信息。该网页说明了 Ruby核心中的回归错误,该错误导致某些人出现此问题。重点是我的;长此以往,GitHub有一个针对此Ruby核心修复程序的请求,希望它会被批准并合并到即将发布的Ruby版本中:
经过几个小时的故障排除,事实证明是这样!显然,随着Ruby的标准库从1.8.6到2.0.0的演变地方,使用WEBrick获得了新的配置选项
:DoNotReverseLookup
被设置为nil
默认。然后,深入了解WEBrick的请求处理代码,它将do_not_reverse_lookup
传入连接套接字实例上的标志设置 为的值config[:DoNotReverseLookup]
。由于此值是nil
,这是虚假的,因此效果与将其设置为false
,覆盖全局Socket.do_not_reverse_lookup
标志相同。因此,除非DoNotReverseLookup => true
在WEBrick配置中具有:,否则将始终对每个新连接进行反向DNS查找,从而可能导致严重的延迟。
与该发现相关的是作者的GitHub拉取请求,提出了如何修复Ruby WEBrick源代码中的问题:修复WEBrick的:DoNotReverseLookup配置选项实现#731中的回归错误。
请求中概述的解决方案是从中更改第181行lib/webrick/server.rb
:
sock.do_not_reverse_lookup = config[:DoNotReverseLookup]
对此:
unless config[:DoNotReverseLookup].nil?
如果有人偶然发现了这个广受好评的问题/答案线程,并且对在Ruby core中解决此问题的进展感兴趣,请在此处共享。希望在下一个版本的Ruby中可以合并此请求,或者以某种方式解决潜在的问题。也许是2.1.6?
这是一个很晚的答案,但是我花了大部分时间调试在Vagrant上运行的Rails的问题。更改反向DNS查找实际上并没有改善请求时间。在开发模式下,两件事的结合使我的页面加载从约20秒增加到了约3秒:
用杂种代替WEBrick。我必须使用预发行版本,否则将无法安装:
sudo gem install mongrel --pre
然后将其添加到我的Gemfile中进行开发:
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
DoNotReverseLookup
ruby 1.8.x webrick中没有选项。解决方案是:
Socket.do_not_reverse_lookup = true
脚本开头的某个位置。
在我可能很少见的情况下,它在刷新了iptables之后仍然有效,这没有任何副作用,因为我没有任何自定义规则(只是默认的Ubuntu允许所有):
sudo iptables -F