2013-08-22 101 views
1

我正在websocket服務器上運行壓力測試,以測量它可以同時服務多少個客戶端以及依賴於該數量的服務。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> 

服務器是一個Amazon EC2 t1.micro實例與Ubuntu。

還有什麼可以導致此限制?

回答

0

嘗試將ulimit -s降低到比無限/默認值低得多的值,無論任何代碼將創建多個線程,並確保/ proc/sys/kernel/threads-max不低於六位數字。