Как узнать, запущен ли apache (или настроен для запуска) как предварительный форк или рабочий?
Ответы Series8217 и Andol неверны.
Вопрос был в том, как определить, что Apache Бег prefork или рабочий. Совет, данный другими ответами, говорит только о том, что дефолт MPM (на основе встроенных модулей), а не в том случае, если в настоящее время используется это значение по умолчанию или другой выбор.
Если httpd -V
показывает prefork, это просто означает, что prefork является встроенным MPM по умолчанию. Это можно изменить, изменив параметр файла конфигурации Apache, как показано в этом процессе:
/etc/sysconfig/httpd
на CentOS / RedHat)HTTPD=/usr/sbin/httpd.worker
Какой MPM действительно запущен, можно показать с помощью этого процесса:
curl localhost/server-info
httpd -V
снова - он все равно будет показывать prefork, а не workerНижняя граница:
httpd -V
показывает вариант по умолчанию, а не тот, который фактически используетсяНа многих-многих веб-сайтах есть ответы, говорящие, что используйте httpd -V
чтобы узнать, работает ли Apache prefork или worker. Все они неправы. Попробуйте описанную выше процедуру, чтобы убедиться в этом.
В Ubuntu 14.04
a2query -M
Говорит event
, prefork
, worker
Вы можете изменить его, добавив символические ссылки для mpm_<chosen>
из mods-available
к mods-enabled
в /etc/apache2
.
Разрешено только одно.
MPM настраивается во время компиляции. Один из способов понять это впоследствии - составить список скомпилированных модулей. Этот список будет включать выбранный MPM. Листинг может быть выполнен с использованием двоичного файла apache с флагом -l.
andreas@halleck:~$ apache2 -l
Compiled in modules:
core.c
mod_log_config.c
mod_logio.c
worker.c
http_core.c
mod_so.c
andreas@halleck:~$
Здесь мы находим модуль worker.c, следовательно, я запускаю рабочий MPM.
На Red Hat и производных просто запустите top
или ps aux
и посмотрите на имя процесса httpd:
httpd
означает, что Apache работает как preforkhttpd.worker
означает, что он работает как рабочийВ RHEL / Fedora / и т. Д. Запустите httpd -V
. Вы получите результат, который включает следующее:
Server version: Apache/2.2.21 (Unix)
...
Architecture: 64-bit
Server MPM: Prefork
...
Здесь «Server MPM» - это «Prefork», поэтому на моем сервере запущен prefork MPM.
Крис Джонсон прав. Перейти к httpd.conf => добавьте эту строку:
<Location /server-info>
SetHandler server-info
</Location>
Перезагрузите apache: /etc/init.d/httpd restart. Тогда доступ localhost / информация о сервере вашим браузером и посмотрите раздел MPM Name.
Вот еще один метод, который, как я полагаю, должен быть надежным при определении того, какой MPM используется. Добавьте следующее в свой httpd.conf
:
<IfModule prefork.c>
Header append X-MPM prefork
</IfModule>
<IfModule worker.c>
Header append X-MPM worker
</IfModule>
Затем проверьте заголовки, используя curl -I localhost | grep X-MPM
.
на centos (или rhel) вы можете запустить эту команду:
ps -ef | grep httpd
Если ты видишь /usr/sbin/httpd.worker
запущен, то он использует рабочий MPM. Если ты видишь /usr/sbin/httpd
работает, то он использует предварительную вилку
Ответ Криса Джонсона правильный.
После включения информационного модуля, как описано в документации Apache (http://httpd.apache.org/docs/2.2/mod/mod_info.html), этот лайнер даст вам MPM, который вы используете:
links -dump http://localhost/server-info/?server | grep "MPM Name"
Один из способов понять это в Debian, как и в дистрибутивах, - это запустить:
apachectl -V | grep -i mpm