Как мне узнать, работает ли apache как prefork или рабочий?


40

Как мне узнать, работает ли Apache (или настроен ли он на запуск) как prefork или рабочий?


2
или более технически «скомпилирован для запуска как»

Ответы:


37

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.


4
Этот ответ неверен. Смотри мой ответ.
Крис Джонсон

1
Хм, в Ubuntu у меня нет ни рабочего, ни префорка, когда я делаю это ...
mlissner

2
В Ubuntu вы можете использовать apache2ctl -Mсписок активных модулей.
SteffenNielsen

53

Ответы, данные Series8217 и Andol, неверны.

Вопрос был в том, как определить, работает ли Apache на prefork или на рабочем месте. Советы, приведенные в других ответах, говорят только о том, что представляет собой MPM по умолчанию (на основе скомпилированных модулей), но не в том случае, если этот вариант по умолчанию или другой выбор используется в настоящее время.

Если httpd -Vпоказывает prefork, это просто означает, что prefork - это скомпилированный MPM по умолчанию. Это можно изменить, изменив настройку файла конфигурации Apache, как показано в этом процессе:

  1. Отредактируйте файл конфигурации (например, /etc/sysconfig/httpdв CentOS / RedHat)
  2. Добавьте или раскомментируйте эту строку: HTTPD=/usr/sbin/httpd.worker
  3. Перезапустите Apache

Какой MPM на самом деле работает, можно показать с помощью этого процесса:

  1. Включить Apache mod_info
  2. Запросите mod_info url, обычно curl localhost/server-info
  3. В разделе «Настройки сервера» отобразится «Имя MPM: рабочий»
  4. Запустите httpd -Vснова - он покажет префорк, а не рабочий

Нижняя граница:

  • httpd -V показывает параметр по умолчанию, а не тот, который на самом деле используется

На многих сайтах есть ответы, в которых говорится, httpd -Vчто Apache использует prefork или рабочий. Они все не правы. Попробуйте описанную выше процедуру, чтобы убедиться в этом.


К вашему сведению, согласно httpd.apache.org/docs/trunk/mpm.html MPM может быть статическим модулем на всех платформах или построен как DSO (в Unix). Когда он построен как статический модуль, «сервер должен быть перестроен, чтобы изменить MPM». Является ли документация apache неверной о неизменяемости статического модуля MPM, за исключением перестройки сервера?
Стивен Т. Снайдер

Это звучит очень похоже на что-то специфичное для дистрибутива, с оберткой более высокого уровня?
андол

2
В CentOS 6.6 / usr / sbin / httpd, /usr/sbin/httpd.event и /usr/sbin/httpd.worker - это отдельные двоичные файлы с различными MPM, настроенными во время компиляции (prefork, event и worker соответственно). Изменение настроек HTTPD в / etc / sysconfig / httpd просто контролирует, какой двоичный файл запускается сценарием инициализации.
Пол Холдейн

Мне пришлось запустить apache2 -V вместо httpd -V в Ubuntu 16.04 LTS
cnizzardini

41

В Ubuntu 14.04

a2query -M

Сообщает event, prefork,worker

Вы можете изменить его, добавив , символические ссылки на mpm_<chosen>от mods-availableдо mods-enabledв /etc/apache2.

Только один разрешен за один раз.


2
Это должен быть принятый ответ.

да, отличный ответ! просто и возвращает то, что нужно
Flash Thunder

Работал для меня лучше всего, спасибо (работал на apache 2.4 .... похоже, он не работает на apache 2.2)
dmikam

Согласно eventсайту Apache, MPM является «вариантом рабочего MPM с целью использования потоков только для соединений с активной обработкой».
Джонатан Бергер

7

На RedHat и производных, просто запустите topили ps auxи посмотрите на имя процесса httpd:

  • httpd означает, что Apache работает как prefork
  • httpd.worker означает, что он работает как рабочий

4

На RHEL / Fedora / etc запустите httpd -V. Вы получите вывод, который включает в себя следующее:

Server version: Apache/2.2.21 (Unix)
     ...
Architecture:   64-bit
Server MPM:     Prefork
     ...

Здесь «Server MPM» - это «Prefork», поэтому на моем сервере запущена prefork MPM.


Этот ответ неверен. Смотри мой ответ.
Крис Джонсон

@ChrisJohnson, интересное открытие ... Насколько я понимаю, MPM нельзя изменить с помощью конфигурации, только путем компиляции. Кажется, ФП думал так же, так как он прокомментировал свой вопрос как «или более технически« скомпилирован, чтобы работать как ». Я посмотрю, как воспроизвести твой ответ, и как только я это подтвердлю, я отзову свой.
Стивен Т. Снайдер

В документации apache по адресу httpd.apache.org/docs/trunk/mpm.html я подтвердил, что MPM можно создавать как модули DSO и динамически загружать с помощью директивы LoadModule для «Unix и аналогичных платформ». Таким образом, MPM действительно может быть изменен во время загрузки при определенных обстоятельствах (которые могут быть самой распространенной конфигурацией в наши дни ..)
Стивен Т. Снайдер

4

Крис Джонсон прав. Зайдите на httpd.conf => добавьте эту строку:

<Location /server-info>
SetHandler server-info
</Location>

Перезапустите apache: /etc/init.d/httpd restart. Затем зайдите в localhost / server-info через ваш браузер и посмотрите раздел MPM Name .


Что еще приятнее, поместите это между <IfModule info_module> </ IfModule>
Lexib0y

3

Вот еще один метод, который, я ожидаю, должен быть надежным при определении того, какой 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.


3

на centos (или rhel) вы можете запустить эту команду:

ps -ef | grep httpd

если вы видите /usr/sbin/httpd.workerзапущенный, то он использует рабочий MPM. если вы видите /usr/sbin/httpdбег, то он использует prefork


2

Ответ Криса Джонсона правильный.

После включения информационного модуля, как описано в документации Apache ( http://httpd.apache.org/docs/2.2/mod/mod_info.html ), этот вкладыш даст вам MPM, который вы используете:

links -dump http://localhost/server-info/?server | grep "MPM Name"

2

Один из способов, который я понял в Debian, как в дистрибутивах, это запустить:

apachectl -V | grep -i mpm
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.