Как настроить MPM для оптимальной производительности на Apache?

Я совершенно новичок в настройке apache. Существует множество учебных пособий, но редко всеобъемлющих, как что-то сделать.

Что мне интересно, так это:

  1. Как изменить профиль MPM, который будет использоваться моим apache?
  2. Как рассчитать оптимальное количество клиентов и соединений в 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.

Другие вопросы по тегам