Назад | Перейти на главную страницу

Как настроить 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"

MPM настраиваются на вашем сервере Apache во время компиляции. Итак, чтобы использовать другой MPM, вам придется перекомпилировать apache или установить другой предварительно скомпилированный двоичный файл с желаемым MPM (если он доступен для вашей ОС). Однако для большинства целей prefork MPM в порядке, особенно если вы собираетесь запускать PHP. PHP не считается потокобезопасным, поэтому вам не следует использовать worker, и event экспериментальный ...

Так что оставайся с prefork и единственные параметры, имеющие отношение к вам, - это <IfModule mpm_prefork_module> раздел. Каковы наилучшие значения для вас, в основном, зависит от того, сколько одновременных пользователей вы ожидаете и как это варьируется. Я бы начал с того, что просто оставил параметры как есть, и начал бы настройку производительности только в том случае, если вы действительно столкнетесь с проблемами производительности. Используйте страницу состояния, чтобы узнать, сколько клиентов обычно подключаются к вашему серверу. Если в конечном итоге вы обслуживаете более 150 одновременных пользователей, увеличьте MaxClients.