Comment augmenter le nombre maximal de connexions simultanées dans Apache?

102

Quels paramètres de configuration httpd dois-je modifier pour augmenter le nombre maximal de connexions simultanées pour Apache? REMARQUE: j'ai désactivé KeepAlive car il s'agit principalement d'un serveur 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
la source

Réponses:

170

Voici une explication détaillée sur le calcul de MaxClients et 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

Tout d'abord, chaque fois qu'un apache est lancé, il démarrera 2 processus enfants qui sont déterminés par StartServersparamètre. Ensuite, chaque processus démarrera 25 threads déterminés par ThreadsPerChildparamètre, ce qui signifie que 2 processus ne peuvent desservir que 50 connexions / clients simultanés, soit 25x2 = 50. Désormais, si plusieurs utilisateurs simultanés arrivent, un autre processus enfant démarre, qui peut desservir 25 autres utilisateurs. Mais le nombre de processus enfants pouvant être démarrés est contrôlé par ServerLimitparamètre, cela signifie que dans la configuration ci-dessus, je peux avoir 16 processus enfants au total, chaque processus enfant pouvant gérer 25 threads, au total 16x25 = 400 utilisateurs simultanés. Mais si le nombre défini dans MaxClientsest inférieur à 200 ici, cela signifie qu'après 8 processus enfants, aucun processus supplémentaire ne démarrera puisque nous avons défini un plafond supérieur deMaxClients. Cela signifie également que si je définis MaxClientssur 1000, après 16 processus enfants et 400 connexions, aucun processus supplémentaire ne démarrera et nous ne pouvons pas desservir plus de 400 clients simultanés même si nous avons augmenté le MaxClientparamètre. Dans ce cas, nous devons également augmenter ServerLimità 1000/25, c'est-à-dire MaxClients/ThreadsPerChild=40 qu'il s'agit de la configuration optimisée pour le serveur 1000 clients

<IfModule mpm_worker_module>
    ServerLimit          40
    StartServers          2
    MaxClients          1000
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>
Raisul
la source
24
Il semble y avoir quelques changements après la version 2.3.13. Par exemple, MaxClients est maintenant MaxRequestWorkers.
ılǝ
2
Veuillez aviser: le site lié sert actuellement des logiciels malveillants (et du porno) ... Il est probablement piraté ... Assez ennuyeux si vous êtes au travail à la recherche d'une solution sur stackoverflow et qu'un site porno complet s'ouvre ... sitecheck.sucuri. net / results / www.genericarticles.com
yoano
1
D'accord, mais quelle est la mémoire requise et les exigences CPU pour cette configuration optimale. Ou comment puis-je prendre en compte le processeur et la mémoire également pour ces optimisations.
indianwebdevil
J'ai appliqué cette configuration et les connexions actuelles sont toujours atteintes ... cela semble être une limite dure ailleurs
Jorge Cornejo Bellido