Como você aumenta o número máximo de conexões simultâneas no Apache?

102

Quais configurações de httpd conf eu preciso mudar para aumentar o número máximo de conexões simultâneas para o Apache? NOTA: Eu desliguei KeepAlive porque este é principalmente um servidor API.

#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive Off

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 15

##
## Server-Pool Size Regulation (MPM specific)
## 

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75 
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>
JonnyJon
fonte

Respostas:

170

Aqui está uma explicação detalhada sobre o cálculo de MaxClients e MaxRequestsPerChild

http://web.archive.org/web/20160415001028/http://www.genericarticles.com/mediawiki/index.php?title=How_to_optimize_apache_web_server_for_maximum_concurrent_connections_or_increase_max_clients_in_apache

ServerLimit 16
StartServers 2
MaxClients 200
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25

Em primeiro lugar, sempre que um apache é iniciado, ele iniciará 2 processos filhos que são determinados por StartServersparâmetro. Então, cada processo iniciará 25 threads determinados por ThreadsPerChildparâmetro, então isso significa que 2 processos podem atender a apenas 50 conexões / clientes simultâneos, ou seja, 25x2 = 50. Agora, se mais usuários simultâneos vierem, outro processo filho será iniciado, podendo atender a outros 25 usuários. Porém, quantos processos filhos podem ser iniciados é controlado por ServerLimitparâmetro, isso significa que na configuração acima, posso ter 16 processos filhos no total, sendo que cada processo filho pode lidar com 25 threads, em um total de 16x25 = 400 usuários simultâneos. Mas se o número definido em MaxClientsfor menor, que é 200 aqui, isso significa que após 8 processos filho, nenhum processo extra será iniciado, pois definimos um limite superior deMaxClients. Isso também significa que se eu definir MaxClientspara 1000, após 16 processos filho e 400 conexões, nenhum processo extra será iniciado e não podemos atender a mais de 400 clientes simultâneos, mesmo que tenhamos aumentado o MaxClientparâmetro. Neste caso, precisamos aumentar também ServerLimitpara 1000/25, ou seja, MaxClients/ThreadsPerChild=40 esta é a configuração otimizada para o servidor de 1000 clientes

<IfModule mpm_worker_module>
    ServerLimit          40
    StartServers          2
    MaxClients          1000
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>
Raisul
fonte
24
Parece haver algumas mudanças após a versão 2.3.13. Por exemplo, MaxClients agora é MaxRequestWorkers.
ılǝ
2
Por favor, avise: o site vinculado está servindo malware (e pornografia) ... Provavelmente foi hackeado ... Bastante irritante se você estiver no trabalho procurando por uma solução para stackoverflow e um site pornográfico completo for aberto ... sitecheck.sucuri. net / results / www.genericarticles.com
yoano
1
Ok, mas qual é a memória necessária e os requisitos de CPU para esta configuração ideal. Ou como faço para levar em consideração CPU e memória também para essas otimizações.
indianwebdevil
Apliquei esta configuração e ainda assim as ligações actuais são atingidas ... parece um limite rígido noutro local
Jorge Cornejo Bellido