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で実行されています。
では、この問題を防ぐための次のステップは何ですか?