Я новичок в настройке apache. Существует множество руководств, но редко исчерпывающих, как что-то сделать.
Что мне интересно:
Я использую: 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.