我在websocket服务器上运行压力测试,以测量它可以同时服务的客户端数量以及取决于该数量的客户端数量。
我使用的服务器实现是pywebsocket,它是apache服务器的扩展。 显然,这会为每个新客户端创建一个新线程。
问题是我只能达到 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实例。
还有什么可能导致此限制?
答案 0 :(得分:0)
尝试将ulimit -s减少到比无限/默认值低得多的值,因为任何代码都会创建许多线程,并确保/ proc / sys / kernel / threads-max不低于6位数。