Як я можу дізнатися, чи працює apache як префорк або робочий?


40

Як я можу дізнатися, чи працює apache (або налаштований для запуску) як префорк або робочий?


2
або більш технічно "складено для запуску як"

Відповіді:


37

MPM налаштовується під час компіляції. Один із способів з’ясувати це згодом - це перелік складених у модулях. Цей список буде включати обраний MPM. Лістинг можна здійснити за допомогою бінарного апаша з прапором -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 префорк або робочий. Поради, надані іншими відповідями, лише вказують на те, що таке 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. Зазвичай запитуйте URL-адресу mod_info curl localhost/server-info
  3. У розділі "Налаштування сервера" відображатиметься "Ім'я MPM: Worker"
  4. Біжіть httpd -Vзнову - все одно буде показаний префорк, а не робочий

Нижня лінія:

  • httpd -V показує параметр за замовчуванням, а не той, який фактично використовується

На багатьох, багатьох веб-сайтах є відповіді, які говорять, використовуйте, httpd -Vщоб сказати, чи Apache працює префорком або робочим. Вони всі помиляються. Спробуйте описану вище процедуру, щоб переконатися в цьому.


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

Це дуже схоже на щось специфічне для дистрибутива, з обгорткою більш високого рівня навколо?
andol

2
У CentOS 6.6 / usr / sbin / httpd, /usr/sbin/httpd.event та /usr/sbin/httpd.worker - всі окремі бінарні файли з різними MPM, налаштованими під час компіляції (префорк, подія та працівник відповідно). Зміна налаштування HTTPD в / etc / sysconfig / httpd просто керує тим, який двійковий файл керується скриптом init.
Пол Халдейн

Мені довелося запустити 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

Мені подобається найкраще, дякую (працював на апачі 2.4 .... схоже, що він не працює на апачі 2.2)
dmikam

eventMPM, згідно з сайтом Апача «варіант працівника MPM з метою споживаючи теми тільки для з'єднань з активною обробкою».
Джонатан Бергер

7

У RedHat та похідних просто запустіть topабо ps auxподивіться назву процесу httpd:

  • httpd означає, що Apache працює як префорк
  • httpd.worker означає, що він працює як працівник

4

На RHEL / Fedora / тощо запустіть httpd -V. Ви отримаєте деякий вихід, який включає в себе наступне:

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

Тут "Сервер MPM" - "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 перезапустити. Потім перейдіть до інформації про localhost / сервер у своєму браузері та перегляньте розділ Ім'я MPM .


Ще приємніше, покладіть це між <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біг, то він використовує префорк


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.