質問

CherryPyを使用して記述されたWebアプリケーションがあり、これは 127.0.0.1:4321 でローカルに実行されます。 mod-rewriteとmod-proxyを使用して、Apacheをリバースプロキシとして機能させます。 ApacheはSSL暗号化も処理し、最終的にすべての静的コンテンツの転送に使用される可能性があります。

これらはすべて、小さなワークロードに対しては問題なく機能します。ただし、最近 urllib2 を使用して、100クライアントのワークロードをシミュレートするストレステストスクリプトを記述しました。しばらくすると、各クライアントはApacheから503エラーを受け取り、Apacheが 127.0.0.1:4321 に接続できないことを示します。 CherryPyは正常に機能していますが、Apacheエラーログには次のような行が表示されます。

[Thu Oct 02 12:55:44 2008] [error](OS 10048)通常、各ソケットアドレス(プロトコル/ネットワークアドレス/ポート)の使用は1つだけ許可されます。 :プロキシ:HTTP:127.0.0.1:4321(*)への接続に失敗しました

このエラーをグーグルで調べると、Apacheがソケットファイル記述子を使い果たした可能性があります。 100個のクライアントしか実行していないため、これは urllib2 接続とApacheの間で接続が閉じられていないことを意味します(私は間違いなく .close()を呼び出しています戻り値 urlopen )、またはApacheとCherryPyの間。

urllib2 リクエストがHTTP Connection:close ヘッダーを送信していることを確認しましたが、Apacheは KeepAlive On で構成されています

重要な場合、Python 2.5、Apache 2.2、CherryPy 3.0.3を使用しており、サーバーはWindows Server 2003で実行されています。

では、この問題を止めるための次のステップは何ですか?

役に立ちましたか?

解決

SetEnv proxy-nokeepalive 1 は、ApacheとCPの間で問題がキープアライブである場合、おそらくすぐに通知します。詳細については、 mod_proxyドキュメントを参照してください。

他のヒント

netstatコマンドを実行して、TIME_WAIT状態のソケットがたくさんあるかどうかを確認できます。 MaxUserPort設定によっては、使用可能なポートの数が大幅に制限される場合があります。さらに、TcpTimedWaitDelayは通常240秒に設定されているため、使用されているソケットは4分間再利用できません。

ここにはもっと良い情報があります-> http://smallvoid.com/article/winnt-tcpip-max-limit.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top