Как настроить MPM для оптимальной производительности на Apache?
Я совершенно новичок в настройке apache. Существует множество учебных пособий, но редко всеобъемлющих, как что-то сделать.
Что мне интересно, так это:
- Как изменить профиль MPM, который будет использоваться моим apache?
- Как рассчитать оптимальное количество клиентов и соединений в apache2.conf, этот сервер в основном используется для нескольких систем CMS, таких как WordPress и т. Д. С включенным кэшированием?
Сервер, который я использую: XEON E3-1230 (4 x 3,2 ГГц) и 16 ГБ DDR3 EEC. Я надеюсь, что дальнейшее описание не имеет значения.
Это то, что у меня есть в /etc/apache2/apache2.conf
# prefork MPM
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
# worker MPM
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
# event MPM
<IfModule mpm_event_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
Модули Apache:
# apache2ctl -l
Compiled in modules:
core.c
mod_log_config.c
mod_logio.c
prefork.c
http_core.c
mod_so.c
Другой:
Server version: Apache/2.2.16 (Debian)
# apache2ctl -V
Server version: Apache/2.2.16 (Debian)
Server built: Mar 3 2013 12:09:44
Server's Module Magic Number: 20051115:24
Server loaded: APR 1.4.2, APR-Util 1.3.9
Compiled using: APR 1.4.2, APR-Util 1.3.9
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="/var/run/apache2/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
1 ответ
MPM настраиваются на вашем сервере apache во время компиляции. Поэтому для использования другого MPM вам придется перекомпилировать apache или установить другой предварительно скомпилированный двоичный файл с желаемым MPM (если он доступен для вашей ОС). Однако для большинства целей prefork
MPM просто отлично, особенно если вы собираетесь запускать PHP. PHP не считается потокобезопасным, поэтому вы не должны использовать worker
, а также event
экспериментально...
Так что оставайтесь с prefork
и единственные параметры, имеющие отношение к вам, это один в <IfModule mpm_prefork_module>
раздел. Наилучшие значения для вас, в основном, зависят от того, сколько одновременных пользователей вы ожидаете, и как это меняется. Я бы начал с того, что оставил параметры такими, какие они есть, и начал бы настройку производительности, только если вы действительно столкнетесь с проблемами производительности. Используйте страницу состояния, чтобы узнать, сколько клиентов обычно подключаются к вашему серверу. Если вы в конечном итоге обслуживаете более 150 одновременно работающих пользователей, увеличивается MaxClients.