サーバーが応答しないのはなぜですか?

サーバーが応答しないのはなぜですか?

当社のサーバーは、単純な HTML ページの提供を拒否する場合があります。

これは、リクエスト数が比較的多いときに発生します。ただし、プロセッサの負荷は高くなく、空きメモリも十分にあります。サーバーの負荷に応じて、平均して 50 リクエストにつき 1 リクエストの割合でエラーが発生するようです。

問題の原因を突き止め、それを解消するために適切な措置を講じる必要があります。

問題の原因は、大量の受信ネットワーク パケットにあるのではないかと考えています。平均して 1 秒あたり 5000 パケットあります。トラフィック - 2 MBits/秒 これがエラーの原因でしょうか?

興味深いことに、サーバーが応答に失敗した場合、リクエスト文字列は Apache によって access.log に記録されません。

このエラーは複数のクライアント コンピューターで再現可能です。IP でサーバーにアクセスしたため、DNS は関係ありません。

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

---- 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
--------

ホスティング会社: SuperbHosting

OS: Ubuntu

サーバーパラメータ: E6300 CONROE 1.86GHZ 2 X 1MB キャッシュ 1066 1GB DDR2 667MHZ

これは私たちが使用するApache設定ファイルへのリンクですhttp://repkin5.snow.prohosting.com/apache.txt

これはタイムアウト エラー直後に取得されたサーバー ステータス レポートです。http://repkin5.snow.prohosting.com/server-status.htm120 台のうち実行中の子サーバーは 10 台だけなので、新しいリクエストを処理するのに十分なスペースがあります。

仮想マシン

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0   8900 725900   8468  65684    0    0     5    18   11   33  4  3 92  1

答え1

  • 興味深いことに、サーバーが応答に失敗した場合、リクエスト文字列は Apache によって access.log に記録されません。

これはネットワークの問題のようです。サーバーは、何らかの理由で応答できない場合でも、受信したすべてのリクエストをログに記録する必要があります。Web サーバーでパケット損失が発生していないことを確認することをお勧めします。

答え2

TCP 接続に使用できるカーネル バッファが少ない状況にある可能性はわずかにあります。その場合は、何らかのログが記録されるはずです (サーバーにログインし、「応答なし」になるまでテストしてから実行し、dmesg該当するものがあるかどうかを確認します)。

ネットワーク設定を調整するには、これは出発点かもしれない

Chris Nava 氏が言ったように、ネットワーク全体でパケット損失が発生していないことを確認する価値はおそらくあるので、ぜひ ping を使用してチェックを開始してください (残念ながら、ping に応答することは TCP パケットを処理することとはまったく同じではありません)。

関連情報