Wie erhöhen Sie die maximale Anzahl gleichzeitiger Verbindungen in Apache?

102

Welche httpd conf-Einstellungen muss ich ändern, um die maximale Anzahl gleichzeitiger Verbindungen für Apache zu erhöhen? HINWEIS: Ich habe KeepAlive deaktiviert, da dies hauptsächlich ein API-Server ist.

#
# 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
quelle

Antworten:

170

Hier finden Sie eine detaillierte Erklärung zur Berechnung von MaxClients und 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

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

Wenn ein Apache gestartet wird, werden zunächst zwei untergeordnete Prozesse gestartet, die durch StartServersParameter bestimmt werden. Dann startet jeder Prozess 25 Threads, die durch ThreadsPerChildParameter bestimmt werden. Dies bedeutet, dass 2 Prozesse nur 50 gleichzeitige Verbindungen / Clients bedienen können, dh 25x2 = 50. Wenn nun mehr gleichzeitige Benutzer hinzukommen, wird ein weiterer untergeordneter Prozess gestartet, der weitere 25 Benutzer bedienen kann. Aber wie viele untergeordnete Prozesse gestartet werden können, wird durch ServerLimitParameter gesteuert . Dies bedeutet, dass ich in der obigen Konfiguration insgesamt 16 untergeordnete Prozesse haben kann, wobei jeder untergeordnete Prozess 25 Threads verarbeiten kann, insgesamt 16x25 = 400 gleichzeitige Benutzer. Wenn jedoch die in definierte Zahl MaxClientskleiner ist, was hier 200 ist, bedeutet dies, dass nach 8 untergeordneten Prozessen kein zusätzlicher Prozess gestartet wird, da wir eine Obergrenze von definiert habenMaxClients. Dies bedeutet auch, dass bei einer Einstellung MaxClientsauf 1000 nach 16 untergeordneten Prozessen und 400 Verbindungen kein zusätzlicher Prozess gestartet wird und wir nicht mehr als 400 gleichzeitige Clients bedienen können, selbst wenn wir den MaxClientParameter erhöht haben . In diesem Fall müssen wir auch ServerLimitauf 1000/25 erhöhen , dh MaxClients/ThreadsPerChild=40 dies ist die optimierte Konfiguration für Server 1000-Clients

<IfModule mpm_worker_module>
    ServerLimit          40
    StartServers          2
    MaxClients          1000
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>
Raisul
quelle
24
Nach Version 2.3.13 scheint es einige Änderungen zu geben. Zum Beispiel ist MaxClients jetzt MaxRequestWorkers.
ılǝ
2
Bitte beachten Sie: Die verlinkte Website bietet derzeit Malware (und Pornos) an ... Sie ist wahrscheinlich gehackt ... Ziemlich ärgerlich, wenn Sie auf der Suche nach einer Lösung für Stackoverflow sind und eine vollständige Pornoseite geöffnet wird ... sitecheck.sucuri. net / results / www.genericarticles.com
yoano
1
Okay, aber was ist der Speicherbedarf und die CPU-Anforderungen für diese optimale Konfiguration. Oder wie berücksichtige ich die Berücksichtigung von CPU und Speicher auch für diese Optimierungen?
Indianwebdevil
Ich habe diese Konfiguration angewendet und trotzdem sind die aktuellen Verbindungen erreicht ... scheint irgendwo anders eine harte Grenze zu sein
Jorge Cornejo Bellido