112 votes

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

Quels paramètres de httpd conf dois-je modifier pour augmenter le nombre maximal de connexions simultanées pour Apache ? NOTE : 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>

188voto

Raisul Points 381

Voici une explication détaillée du 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émarre 2 processus enfants qui sont déterminés par StartServers paramètre. Ensuite, chaque processus démarrera 25 threads déterminés par ThreadsPerChild Cela signifie donc que 2 processus ne peuvent gérer que 50 connexions/clients simultanés, c'est-à-dire 25x2=50. Maintenant, si plus d'utilisateurs simultanés arrivent, alors un autre processus enfant sera lancé, qui pourra servir 25 autres utilisateurs. Mais le nombre de processus enfants qui peuvent être lancés est contrôlé par le paramètre suivant ServerLimit cela signifie que dans la configuration ci-dessus, je peux avoir 16 processus enfants au total, avec chaque processus enfant peut gérer 25 threads, au total gérer 16x25=400 utilisateurs simultanés. Mais si le nombre défini dans MaxClients est inférieur, ce qui est 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 de MaxClients . Cela signifie également que si je mets MaxClients à 1000, après 16 processus enfants et 400 connexions, aucun processus supplémentaire ne démarrera et nous ne pourrons pas servir plus de 400 clients simultanés même si nous avons augmenté le MaxClient paramètre. Dans ce cas, nous devons également augmenter ServerLimit à 1000/25, c'est-à-dire MaxClients/ThreadsPerChild=40 Voici donc 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>

26 votes

Il semble y avoir quelques changements après la version 2.3.13. Par exemple, MaxClients est maintenant MaxRequestWorkers.

2 votes

Veuillez noter que le site lié sert actuellement des malwares (et du porno)... Il a probablement été piraté... C'est assez ennuyeux si vous êtes au travail et que vous cherchez une solution sur stackoverflow et qu'un site porno s'ouvre... sitecheck.sucuri.net/results/www.genericarticles.com

1 votes

D'accord, mais quelle est la mémoire requise et les exigences du CPU pour cette configuration optimale. Ou comment puis-je prendre en compte le CPU et la mémoire pour cette optimisation ?

11voto

Orentet Points 1472

Modifier la directive MaxClients. elle est maintenant sur 256.

2 votes

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X