2013-08-22 2 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** 

Я действительно дону» t знает, где этот предел может исходить, кажется, что это минимальное количество максимальных потоков для процесса, которое я просто установил неограниченно или максимальное количество процессов для пользователя, также теперь установлено неограниченным.

Я также проверил файлы конфигурации 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> 

Сервер является t1.micro экземпляр Amazon EC2 с убунту.

Что еще может вызвать этот предел?

ответ

0

Попробуйте уменьшить значение ulimit -s до гораздо меньшего значения, чем неограниченное/стандартное для любого фрагмента кода, создающего много потоков, и убедитесь, что/proc/sys/kernel/threads-max не ниже шести цифр.

Смежные вопросы