Jak zwiększyć maksymalną liczbę jednoczesnych połączeń w Apache?

102

Jakie ustawienia httpd conf muszę zmienić, aby zwiększyć maksymalną liczbę jednoczesnych połączeń dla serwera Apache? UWAGA: Wyłączyłem KeepAlive, ponieważ jest to głównie serwer 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
źródło

Odpowiedzi:

170

Oto szczegółowe wyjaśnienie dotyczące obliczania MaxClients i 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

Po pierwsze, za każdym razem, gdy uruchamiany jest apache, uruchamia 2 procesy potomne, które są określone przez StartServersparametr. Następnie każdy proces rozpocznie 25 wątków określonych przez ThreadsPerChildparametr, co oznacza, że ​​2 procesy mogą obsługiwać tylko 50 jednoczesnych połączeń / klientów, tj. 25x2 = 50. Teraz, jeśli nadejdzie więcej równoczesnych użytkowników, rozpocznie się kolejny proces potomny, który może obsłużyć kolejnych 25 użytkowników. Ale ile procesów potomnych można uruchomić jest kontrolowanych przez ServerLimitparametr, co oznacza, że ​​w powyższej konfiguracji mogę mieć łącznie 16 procesów potomnych, przy czym każdy proces potomny może obsłużyć 25 wątków, w sumie obsługa 16x25 = 400 jednoczesnych użytkowników. Ale jeśli liczba zdefiniowana w MaxClientsjest mniejsza niż 200 tutaj, oznacza to, że po 8 procesach potomnych żaden dodatkowy proces nie rozpocznie się, ponieważ zdefiniowaliśmy górną granicęMaxClients. Oznacza to również, że jeśli ustawię MaxClientsna 1000, po 16 procesach potomnych i 400 połączeniach żaden dodatkowy proces nie zostanie uruchomiony i nie będziemy mogli obsłużyć więcej niż 400 jednoczesnych klientów, nawet jeśli zwiększymy MaxClientparametr. W tym przypadku musimy również zwiększyć ServerLimitdo 1000/25, czyli MaxClients/ThreadsPerChild=40 jest to zoptymalizowana konfiguracja do serwera 1000 klientów

<IfModule mpm_worker_module>
    ServerLimit          40
    StartServers          2
    MaxClients          1000
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>
Raisul
źródło
24
Wydaje się, że po wersji 2.3.13 nastąpiły pewne zmiany. Na przykład MaxClients to teraz MaxRequestWorkers.
ılǝ
2
Prosimy o poradę: witryna, do której prowadzi łącze, zawiera obecnie złośliwe oprogramowanie (i pornografię) ... Prawdopodobnie została zhakowana ... Dość irytujące, jeśli jesteś w pracy, szukając rozwiązania w zakresie stackoverflow i otwiera się w pełni rozwinięta
yoano
1
W porządku, ale jaka jest wymagana pamięć i wymagania procesora dla tej optymalnej konfiguracji. Albo jak wziąć pod uwagę procesor i pamięć również w przypadku tej optymalizacji.
indianwebdevil
Zastosowałem tę konfigurację i nadal obecne połączenia są osiągnięte ... wydaje się, że gdzie indziej twardy limit
Jorge Cornejo Bellido