web-dev-qa-db-ja.com

Webrickの応答は非常に遅いです。スピードアップする方法は?

サーバー上で実行しているRailsアプリケーションがあります。リモートデスクトップにアクセスしてアプリケーションを読み込もうとすると、サーバーは3〜4分で応答します。単純なHTMLページですが、サーバーにローカルでページをロードすると、ページがほんの数秒で表示されます。リモートデスクトップからサーバーにpingを実行すると、妥当な時間内にpingが成功します。

これはすべて、Oracleの基本クライアントとSQLPLUSをインストールした後に開始されたようです。 Oracleを疑うべきですか?誰もこれに似た何かを経験しましたか?

89
Crypto

ここで同じ問題を抱えています(1年後でも)。 Linuxでは、次のことを行う必要があります。

ファイル/usr/lib/Ruby/1.9.1/webrick/config.rbを探して編集します。

行を置き換える

:DoNotReverseLookup => nil,

:DoNotReverseLookup => true,

Webrickを再起動すると、チャームのように機能します:)

140
Mosty Mostacho

同じ問題がありました。私にとっては、 この投稿 が解決策を保持しました。 Ubuntuを使用している場合は、_avahi-daemon_を停止(またはアンインストール)します。 _service avahi-daemon stop_はデーモンを停止します。

Webrickはveryのスピードを感じます。

問題には Rails Lighthouse の古いレポートがありますが、Ruby-on-Railsは移動しました 彼らのgithubへのチケット それ以来;残念ながら、この古い問題はまだ続いています。

ただし、実際にuse_avahi-daemon_を使用する場合は、ネットワーク上で プリンターとスキャナーの検索 、それはもう機能しません。

36
Prof. Falken

ちょうど同じ問題がありました。の

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

私のためにトリックをしました。 rvmの下でRubyを実行している場合に備えて、次のパスを使用してください。

~/.rvm/rubies/Ruby-<version>/lib/Ruby/<version>/webrick/config.rb
23
Kjellski

「シン」は、両方をローカルで実行するための素晴らしいオプションです herokuで

Herokuの場合:https://devcenter.heroku.com/articles/Rails3#webserver

ウェブサイト: http://code.macournoyer.com/thin/

Gemfileに置くことでローカルで使用できます:

gem "thin"

...次にbundleを実行し、thin startまたはRails sでサーバーを起動します。

Herokuの更新

Thinは、Herokuのbad選択と見なされます。詳細はこちら:

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

彼らの推薦:

JRubyでUnicornやPumaなどの同時Webバックエンドに切り替えます。これにより、dynoは独自のリクエストキューを管理し、長いリクエストでのブロックを回避できます。

15
Jamon Holmgren

私は、VPN経由でWEBrickサーバーにアクセスするときに明らかになる漠然と似た問題を抱えていました。リクエストには長い時間がかかりますが、そのほとんどは何も行われていません。 mongrelthin gemもWindows上のRuby1.9で動作せず、ソースからのものをコンパイルすることに夢中になる方法がなかったため、WEBrickに固執する必要がありました。

修正は、WEBrickサーバーを作成するときに、構成パラメーターDoNotReverseLookuptrueに設定することでした。

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

Apacheを使用するか、Thinをインストールできます。 Gemfileで:gem 'thin'

または、 RailsのWebサーバー のリストを確認できます。

5
Matz Heri

1.8.7のwebrickでこれを行おうとしており、変更する設定が見つかりませんでした。ただし、使用できるチートは、webrickを実行しているサーバーのホストファイルに、逆ルックアップしようとしているIPアドレスを追加することです。

2
patrickdavey

これは古い質問と回答のスレッドで、ローカル開発仮想マシンでの:DoNotReverseLookup問題の解決に役立ち、追加情報を追加したいと考えていました。 このWebページは回帰エラーについて説明しています in Rubyコアがこの問題を一部の人に表示する原因となります。強調は私のものです。これに対するGitHubプルリクエストRubyコア修正。これは、Rubyのまもなくリリースされるリリースで承認およびマージされることを願っています。

トラブルシューティングの数時間後、それがあったことが判明しました!どうやら、Rubyの標準ライブラリの1.8.6から2.0.0への進化のどこかで、WEBrickはデフォルトでnilに設定される新しい構成オプション:DoNotReverseLookupを取得しました。次に、WEBrickのリクエスト処理コードの奥深くで、着信接続ソケットインスタンスのdo_not_reverse_lookupフラグをconfig[:DoNotReverseLookup]の値に設定します。 この値は偽のnilであるため、falseに設定してグローバルSocket.do_not_reverse_lookupフラグを上書きするのと同じ効果があります。したがって、WEBrick構成に:DoNotReverseLookup => trueが含まれていない限り、新しい接続ごとに常にDNS逆引き参照が行われ、潜在的な深刻な遅延が発生する可能性があります。

この発見に関連するのは 著者からのGitHubプルリクエスト Ruby WEBrickソースコードの問題の修復方法の提案: WEBrickの回帰バグを修正:DoNotReverseLookup構成オプションの実装#731

リクエストで概説されているソリューションは、lib/webrick/server.rbの181行目を次のように変更することです:

sock.do_not_reverse_lookup = config[:DoNotReverseLookup]

これに:

unless config[:DoNotReverseLookup].nil?

Rubyコア。このプルがマージされるか、基礎となる問題が処理されることを願っています。 Rubyの次のリリースで何らかの形で、おそらく2.1.6ですか?

1
JakeGould

これは非常に遅い答えですが、この問題をデバッグするためにRails= Vagrantで実行しています。 2つのことの組み合わせにより、開発モードでのページの読み込みが20秒から3秒になりました。

WEBrickをmongrelに置き換えます。プレリリース版を使用しなければ、インストールされませんでした:

Sudo gem install mongrel --pre

次に、devの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
0
AlienWebguy

私のおそらくまれな状況では、iptablesをフラッシュした後に機能しましたが、カスタムルールがなかったため、副作用はありませんでした(デフォルトのUbuntuですべてが許可されています)。

Sudo iptables -F
0
Nabil Kadimi