Какие параметры httpd conf мне нужно изменить, чтобы увеличить максимальное количество одновременных подключений для Apache? ПРИМЕЧАНИЕ. Я отключил KeepAlive, поскольку это в основном сервер 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>
Подробное описание расчета MaxClients и MaxRequestsPerChild
ServerLimit 16
StartServers 2
MaxClients 200
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
Прежде всего, всякий раз, когда запускается apache, он запускает 2 дочерних процесса, которые определяются параметром StartServers
. Затем каждый процесс запускает 25 потоков, определяемых параметром ThreadsPerChild
, поэтому это означает, что 2 процесса могут обслуживать только 50 одновременных подключений/клиентов, то есть 25x2 = 50. Теперь, если придут более параллельные пользователи, начнется другой дочерний процесс, который сможет обслуживать еще 25 пользователей. Но сколько дочерних процессов можно запустить, контролируется параметром ServerLimit
, это означает, что в приведенной выше конфигурации я могу иметь 16 дочерних процессов в целом, причем каждый дочерний процесс может обрабатывать 25 потоков, при общей обработке 16x25 = 400 одновременно работающих пользователей, Но если число, определенное в MaxClients
, меньше, чем 200 здесь, это означает, что после 8 дочерних процессов никакой дополнительный процесс не начнется, так как мы определили верхний предел MaxClients
. Это также означает, что если я установил MaxClients
1000, после 16 дочерних процессов и 400 подключений, никакой дополнительный процесс не запустится, и мы не сможем обслуживать более 400 одновременных клиентов, даже если мы увеличим параметр MaxClient
. В этом случае нам нужно также увеличить ServerLimit
до 1000/25, т.е. MaxClients/ThreadsPerChild=40
Таким образом, это оптимизированная конфигурация для сервера 1000 клиентов
<IfModule mpm_worker_module>
ServerLimit 40
StartServers 2
MaxClients 1000
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
измените директиву MaxClients. теперь он находится на 256.