Модуль Мультіпроцессовой Обробки (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 300 (за замовчуванням)
Час очікування (в секундах), перш ніж спроби прийому або відправлення видають повідомлення про тайм-ауті.
KeepAlive On (за замовчуванням)
Чи допускаються персистентні з'єднання. Для заборони вкажіть Off.
Персистентного з'єднання (persistent connection, keep-alive) - тип віртуального з'єднання між сервером і клієнтом, при якому сервер може обслуговувати понад одного запиту від одного і того ж клієнта в рамках одного і того ж з'єднання, тобто яка не завершується відразу, як тільки сервер обслужив той перший запит клієнта, заради якого дане з'єднання було встановлено, а чекає надходження подальших запитів по тому ж каналу.
MaxKeepAliveRequests 100 (за замовчуванням)
Максимальна кількість запитів при одному персистентному з'єднанні.
Значення 0 знімає обмеження (дозволено необмежену кількість запитів) .Для максимального швидкодії рекомендується високе значення.
KeepAliveTimeout 15 (за замовчуванням)
Час очікування (в секундах) наступного запиту від того ж клієнта в рамках одного персистентного з'єднання.
StartServers 5 (за замовчуванням)
Директива StartServers встановлює число дочірніх процесів, створених при запуску сервера.Поскольку число процесів динамічно змінюється в залежності від навантаження, то зазвичай немає необхідності налаштовувати цей параметр.
MinSpareServers 5 (за замовчуванням)
Директива MinSpareServers встановлює бажане мінімальне число невикористовуваних * дочірніх процесів сервера.Еслі вільних процесів менше, ніж значення MinSpareServers, то батьківський процес створює нові дочірні процеси з максимальною частотою по 1 в секунду.
Налаштування цього параметра необхідна тільки на дуже завантажених сайтах.Увеліченіе цього параметра до великого числа - майже завжди погана ідея!
MaxSpareServers 10 (за замовчуванням)
Директива MaxSpareServers встановлює бажане максимальне число невикористовуваних * дочірніх процесів сервера.
Якщо є більше ніж MaxSpareServers невикористовуваних процесів, то батьківський процес вб'є зайві.
Налаштування цього параметра необхідна тільки на дуже завантажених сайтах. Збільшення цього параметра до великого числа - майже завжди погана ідея! Якщо спробувати встановити значення нижче, ніж MinSpareServers, то Apache автоматично присвоїть це до MinSpareServers + 1.
Для prefork MPM ця директива встановлює максимальне значення MaxClients протягом усього життя процесу сервера Apache.
Використовуючи цю директиву будьте особливо обережні! Якщо значення ServerLimit встановити набагато вище необхідного, то вільна спільно використовувана пам'ять буде зайнята (асигнована, allocated) .Якщо ServerLimit і MaxClients встановити вище, ніж система може обробляти, то Apache може не запуститься або система стане нестабільною.
Використовуйте цю директиву з prefork MPM, тільки якщо Ви хочете встановити MaxClients вище ніж 256 (default) .Не встановлюйте значення цієї директиви ні на скільки вище ніж значення, встановлене в MaxClients.
Це найважливіший параметр prefork MPM, що задає максимальне число дочірніх процесів, яким дозволено запуститься (які будуть створені для обробки запитів).
Значення виставляється великим, щоб обробляти одночасно багато запитів, а меншим для зниження споживання пам'яті!
Скільки Ви вкажете в цій дірректіве, стільки і буде у Вас процесів вставати в чергу на виконання.
MaxRequestsPerChild 10000 (за замовчуванням)
Управляє, як часто сервер переробляє процеси, вбиваючи старі і починаючи (запускаючи) нові, тобто тут вказується число запитів, яке дозволено обробляти дочірньому процесу до переповнення.
Ця дірректіва корисна для того, щоб уникнути проблем при тривалій безперервній роботі, якщо Apache (або які він використовував бібліотеки), допускають витік пам'яті або інших ресурсів, так як при переповненні дочірній процес буде примусово завершен.На більшості систем це не потрібно, але деякі страждають помітними витоками в бібліотеках.Установка значення в 0 знімає обмеження.
Для запитів KeepAlive, тільки перший запит подсчивается до межі MaxRequestsPerChild. Насправді, це змінює дію обмеження числа зв'язків з дочірнім процесом.
Невикористаний (idle) процес - той, який не звертається із запитом.