6

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)Only one usage of each socket address (protocol/network address/port) is normally permitted. : proxy: HTTP: attempt to connect to 127.0.0.1:4321 (*) failed

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

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

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

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

4

2 に答える 2

6

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

于 2008-10-02T21:52:03.957 に答える
5

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

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

于 2008-10-02T20:02:22.410 に答える