web-dev-qa-db-ja.com

Apacheの単一のIPアドレスからの確立された接続が多すぎます

netstat -ntp |grep 80は、単一のIPアドレスからのESTABLISHED接続が多すぎます。それらの周りそしてそれは攻撃ではないそしてユーザーはApacheにアクセスするために2G接続を使用しています。これは、他の2G接続にも当てはまります。この結果、Apacheは子を使い果たしています。

以前はclose_waitが多すぎて、tcp_tw_reusetcp_tw-recycleを有効にした後、close_waitはあまりありませんが、ESTABLISHED接続の数が増えました。

48GBのRAMを搭載したUbuntu11.04を使用しています

keepalive On
keepalive timeout 10
max clients 800
max-request-perchild 4000
timeout 300

syn_ackを1に、syn_retriesを2に設定しました。

Wi-Fiではそのような問題はありません。接続は適切に閉じていますが、2G接続では、Apacheの子が不足しており、ESTABLISHED接続が多すぎます。

また、デフォルトの300から30にtimeoutを設定してみましたが、私たちのプロジェクトは携帯電話用の画像ホスティングであるため、クライアントは頻繁にタイムアウトするため、画像を適切にアップロードできませんでした。 of 408メッセージなので、デフォルトの300に変更しました

1
ananthan

tcp_tw_reuseおよびtcp_tw-recycleおよびtcp-fin_timeoutを30に

フィンのタイムアウトはここで役立ちますが、再利用して再利用しますか?どうして?

キープアライブタイムアウト10

これはばかげています。ダイヤルアップを使用する場合でも、これは3以下である必要があります。

タイムアウト300

これが何をするか知っていますか?これがデフォルトかもしれませんが、やはり高すぎます。

Wiresharkを使用してトラフィックの一部をキャプチャして、接続が閉じられない理由を正確に確認してみてください。

Mod_reqtimeoutをオプションとして使用しています

クライアントが非常にひどく壊れていて、あなたが彼らにサービスを提供することに悩まされていない場合にのみ。

ngnixサーバーに移動する必要があります

確かに遅い接続をはるかに簡単に処理しますが、プロキシとして使用することもできます(そして、iptablesを使用してこれを介して特定のサブネットを選択的/透過的にルーティングできます)

2
symcbean

問題は低速クライアントに関連しています。これを解決する最良の方法は、リバースプロキシソリューションを使用することです。 Apacheからの場合は、nginx、ワニス、または同様のソフトウェア。優れたリバースプロキシサーバーは、何千もの接続を問題なく処理できます。

Nginxをリバースプロキシとして設定するのはなぜ良い考えですか?

2
DukeLion

Timeoutディレクティブを105などのはるかに低いものにドロップしようとしましたか?

または、プリフォークMPMから切り替えて(可能な場合)、Apache2.4のイベントMPMなどのイベント駆動型モデルまたはnginxなどの別のWebサーバーを使用することもできます。

Apacheの前でリバースプロキシとしてnginx(または同様のもの)を使用することもできます。プロキシは、リクエスト全体を受信するまで待機してから、Apacheにアップストリームリクエストを送信します。この場合、このリクエストの途中で遅延は発生しません。

Apacheの子が不足する問題は、使用しているKeepalive設定によっても引き起こされたり悪化したりする可能性があります。これをオフにするか、keepalive timeout値を下げることを検討してください。もちろん、低くしすぎると役に立たなくなる可能性があります。

1
Ladadadada