Websocketサーバーでストレステストを実行して、同時にサービスを提供できるクライアントの数と、その数に依存するものを測定しています。
私が使用しているサーバー実装は、Apache サーバーの拡張である pywebsocket です。どうやら、これにより、新しいクライアントごとに新しいスレッドが作成されます。
問題は、私が378 個のクライアントまでしか移動できず、常に同じ数 (そしてかなり低い) であり、次のクライアントでは次のトレースを受け取ることです。
[2013-08-22 07:47:09,454] [ERROR] __main__.WebSocketServer: Exception in processing request from: ('::ffff:10.36.154.147', 41509, 0, 0)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 284, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 594, in process_request
t.start()
File "/usr/lib/python2.7/threading.py", line 495, in start
_start_new_thread(self.__bootstrap, ())
**error: can't start new thread**
この制限がどこから来るのか本当にわかりません。プロセスの最大スレッド数が無制限に設定されているか、ユーザーのプロセスの最大数が無制限に設定されているようです。 .
apache2 構成ファイルも確認しましたが、これは apache2.conf にあるもので十分です。
MaxKeepAliveRequests 0
KeepAliveTimeout 5
<IfModule mpm_prefork_module>
StartServers 50
ServerLimit 2000
MinSpareServers 50
MaxSpareServers 2000
MaxClients 2000
MaxRequestsPerChild 2000
</IfModule>
<IfModule mpm_worker_module>
StartServers 50
ServerLimit 2000
MinSpareThreads 50
MaxSpareThreads 2000
ThreadLimit 0
ThreadsPerChild 2000
MaxClients 2000
MaxRequestsPerChild 2000
</IfModule>
<IfModule mpm_event_module>
StartServers 50
ServerLimit 2000
MinSpareThreads 50
MaxSpareThreads 2000
ThreadLimit 0
ThreadsPerChild 2000
MaxClients 2000
MaxRequestsPerChild 2000
</IfModule>
サーバーは、ubuntu を使用した Amazon EC2 t1.micro インスタンスです。
他に何がこの制限を引き起こしている可能性がありますか?