Модуль Мультіпроцессовой Обробки (MPM - Multi-Processing Module) prefork здійснює непереплетенний, предразветвляющійся web-сервер, який звертається із запитами подібно Apache 1.3. Це є необхідним для забезпечення сумісності з бібліотеками.
Також це найкращий MPM для того, щоб ізолювати кожен запит, так, щоб проблема з єдиним запитом не торкнулася ніякий інший.
MPM prefork дуже автономний і рідко виникає необхідність в зміні його налаштувань з умовчання (default).
Найважливіший параметр prefork MPM - це MaxClients!
ЯК ЦЕ ПРАЦЮЄ :
Існує єдиний основний (батьківський) процес, який відповідальний за створення дочірніх процесів, які в свою чергу прислухаються до зв'язків і обробляють запити клієнта. Apache завжди намагається тримати в запасі кілька невикористовуваних серверних процесів, які готові обробити надходять запити.
Таким чином, клієнти не повинні чекати створення нових дочірніх процесів, які будуть розгалужену перш, ніж їх запит обслужити.
Директиви StartServers. MinSpareServers. MaxSpareServers і MaxClients регулюють, як батьківський процес створює дочірні процеси, щоб обслуговувати запити.
Взагалі, Apache дуже автономний, таким чином для більшість web-сайтів немає необхідності зміни цих дірректів від значень за замовчуванням (default).
Для сайтів, які повинні обслуговувати більшу 256 одночасних запитів, можливо, слід збільшити MaxClients, а для сайтів, розташованих на серверах з обмеженою пам'яттю, можливо, слід зменшити значення MaxClients, щоб не довести сервер до необхідності Свапи пам'яті на диск (swapping memory to disk and back), що призведе до сильних уповільнення в роботі.
Практично на самому початку основного конфігураційного файлу httpd.conf ми бачимо наступне:
# TimeOut: The number of seconds before receives and sends time out.
TimeOut 300
# KeepAlive: Whether or not to allow persistent connections (more than
# One request per connection). Set to "Off" to deactivate.
KeepAlive On
# MaxKeepAliveRequests: The maximum number of requests to allow
# During a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
MaxKeepAliveRequests 100
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# Same client on the same connection.
KeepAliveTimeout 15
## Server-Pool Size Regulation (MPM specific)
# Prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
Тепер по порядку про кожну дірректіве.
Час очікування (в секундах), перш ніж спроби прийому або відправлення видають повідомлення про тайм-ауті.
Чи допускаються персистентні з'єднання. Для заборони вкажіть Off.
Персистентного з'єднання (persistent connection, keep-alive) - тип віртуального з'єднання між сервером і клієнтом, при якому сервер може обслуговувати понад одного запиту від одного і того ж клієнта в рамках одного і того ж з'єднання, тобто яка не завершується відразу, як тільки сервер обслужив той перший запит клієнта, заради якого дане з'єднання було встановлено, а чекає надходження подальших запитів по тому ж каналу.
Максимальна кількість запитів при одному персистентному з'єднанні.
Значення 0 знімає обмеження (дозволено необмежену кількість запитів).
Для максимального швидкодії рекомендується високе значення.
Час очікування (в секундах) наступного запиту від того ж клієнта в рамках одного персистентного з'єднання.
Директива StartServers встановлює число дочірніх процесів. створених при запуску сервера.
Оскільки число процесів динамічно змінюється в залежності від навантаження, то зазвичай немає необхідності налаштовувати цей параметр.
Директива MinSpareServers встановлює бажане мінімальне число невикористовуваних * дочірніх процесів сервера.
Якщо вільних процесів менше, ніж значення MinSpareServers, то батьківський процес створює нові дочірні процеси з максимальною частотою по 1 в секунду.
Налаштування цього параметра необхідна тільки на дуже завантажених сайтах.
Збільшення цього параметра до великого числа - майже завжди погана ідея!
Директива MaxSpareServers встановлює бажане максимальне число невикористовуваних * дочірніх процесів сервера.
Якщо є більше ніж MaxSpareServers невикористовуваних процесів, то батьківський процес вб'є зайві.
Налаштування цього параметра необхідна тільки на дуже завантажених сайтах. Збільшення цього параметра до великого числа - майже завжди погана ідея!
Якщо спробувати встановити значення нижче, ніж MinSpareServers, то Apache автоматично присвоїть це до MinSpareServers + 1.
Для prefork MPM ця директива встановлює максимальне значення MaxClients протягом усього життя процесу сервера Apache.
Використовуючи цю директиву будьте особливо обережні!
Якщо значення ServerLimit встановити набагато вище необхідного, то вільна спільно використовувана пам'ять буде зайнята (асигнована, allocated).
Якщо ServerLimit і MaxClients встановити вище, ніж система може обробляти, то Apache може не запуститься або система стане нестабільною.
Використовуйте цю директиву з prefork MPM, тільки якщо Ви хочете встановити MaxClients вище ніж 256 (default).
Не встановлюйте значення цієї директиви ні на скільки вище ніж значення, встановлене в MaxClients.
Це найважливіший параметр prefork MPM, що задає максимальне число дочірніх процесів. яким дозволено запуститься (які будуть створені для обробки запитів).
Значення виставляється великим, щоб обробляти одночасно багато запитів, а меншим для зниження споживання пам'яті!
Скільки Ви вкажете в цій дірректіве, стільки і буде у Вас процесів вставати в чергу на виконання.
Управляє, як часто сервер переробляє процеси. вбиваючи старі і починаючи (запускаючи) нові, тобто тут вказується число запитів, яке дозволено обробляти дочірньому процесу до переповнення.
Ця дірректіва корисна для того, щоб уникнути проблем при тривалій безперервній роботі, якщо Apache (або які він використовував бібліотеки), допускають витік пам'яті або інших ресурсів, так як при переповненні дочірній процес буде примусово завершений.
На більшості систем це не потрібно, але деякі страждають помітними витоками в бібліотеках.
Установка значення в 0 знімає обмеження.
Для запитів KeepAlive. тільки перший запит подсчивается до межі MaxRequestsPerChild. Насправді, це змінює дію обмеження числа зв'язків з дочірнім процесом.
ПРИМІТКА:
Невикористаний (idle) процес - той, який не звертається із запитом.