HTTP リクエストがサーバーに届かないことがあります。なぜでしょうか?

HTTP リクエストがサーバーに届かないことがあります。なぜでしょうか?

私たちは専用サーバーで Web サービスをホストしています。時々 (20 回に 1 回くらい) サーバーから応答が受信されないことがあります。その場合、ブラウザはタイムアウト エラーでフォールバックします。

重要な詳細: この場合、リクエストは Apache によってログに記録されません。サーバーはロードされておらず、空きメモリと CPU パワーが大量に残っています。

tcpdump ユーティリティを使用して、問題のケースをプロファイルしました。これらは、tcpdump によってトレースされた「良好な」セッションと「不良」セッションです。両方の実験で要求は同じです。良好 - サーバーが応答を返します。不良 - 応答なし、タイムアウト エラー。

これらのデータから、なぜ問題が発生するのかがわかりますか? エラーの原因をさらに突き止めるにはどうすればよいでしょうか?

実際のIPアドレスを123.45.67.890に置き換えました

---- Bad ----
12:23:36.366292 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:39.362394 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:45.365567 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,nop,sackOK>
--------

---- Good ----
12:27:07.632229 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620946 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620969 IP myserver.superbservers.com.www > 123.45.67.890.63914: S 2654770980:2654770980(0) ack 3581365571 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 6>
12:27:10.838747 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 1 win 4380
12:27:10.957143 IP 123.45.67.890.63914 > myserver.superbservers.com.www: P 1:213(212) ack 1 win 4380
12:27:10.957152 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 213 win 108
12:27:10.965543 IP myserver.superbservers.com.www > 123.45.67.890.63914: P 1:630(629) ack 213 win 108
12:27:10.965621 IP myserver.superbservers.com.www > 123.45.67.890.63914: F 630:630(0) ack 213 win 108
12:27:11.183540 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 631 win 4222
12:27:11.185657 IP 123.45.67.890.63914 > myserver.superbservers.com.www: F 213:213(0) ack 631 win 4222
12:27:11.185663 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 214 win 108
--------

サービスの詳細。

これは天気予報サービスです。Perl で書かれており、MySQL を利用しています。スクリプトはいくつかのモジュール (CPAN および当社独自のもの) を使用します。

コードは比較的シンプルです。スクリプトは別のサーバーから天気をダウンロードし、データ形式を変換して XML 応答を返します。天気は MyISAM DB にキャッシュされます。スクリプト経由で要求できる世界位置データベース (INNODB) もあります。

ホスティング: SuperbHosting OS: Ubuntu

答え1

使ってみるtcpダンプまたはワイヤーシャークネットワーク トラフィックを監視します。そうすれば、少なくともネットワークの問題があるかどうかがわかります。つまり、リクエストがマシンに届くかどうかを確認します。

また、デフォルトでは、ほとんどのブラウザでは、同じサーバーに対して実行できる接続の数が制限されています (2)。ページに、接続を閉じることを「忘れる」JavaScript オブジェクトなどが含まれている場合、ブラウザが実際にはリクエストを送信しない可能性があります。

答え2

IP アドレスのみを使用してリクエストを試していただけますか? そうであれば、問題を絞り込むのに役立つ可能性があります。

問題のあるリクエストはすべて同じ場所から来ていますか? そうであれば、別の場所、たとえばスターバックスのラップトップなどを試してください。問題が複数の場所から、異なるブラウザを使用して、AJAX や複雑な Javascript のない非常に単純なページで発生する場合、それは貴重な情報です。

IP アドレスの使用が確実に機能する場合は、DNS である可能性があります。使用されているドメイン名がわかれば、原因を絞り込むのに役立つ場合があります。

答え3

私なら Michael Gaff を選び、ホスティング会社にいくらかお金を払います。この種のトラフィックの問題は、パッチ パネル、NIC、NIC ドライバーの問題、ケーブル配線の不良など、インフラストラクチャに関するさまざまな問題によって簡単に発生します。

別の場所からこれを試して(または同じ問題を抱えた他の場所からの報告を受けて)、それでも同じ問題が発生したと期待しています。そうすれば、あなたの側の問題を排除できますよね?

私はハードウェアマニアなので、奇妙なソフトウェアやネットワークの問題、そして一般的に大量破壊の原因はハードウェアの故障にあると考える傾向があります。

答え4

問題は、多数の TCP 接続が開かれていることであり、このため新しい接続が時々切断されることがありました。

関連情報