Модуль Мультіпроцессовой Обробки (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 ми бачимо наступне:
Тепер по порядку про кожну дірректіве ...
TimeOut300 (за замовчуванням)
Час очікування (в секундах), перш ніж спроби прийому або відправлення видають повідомлення про тайм-ауті.
KeepAliveOn (за замовчуванням)
Чи допускаються персистентні з'єднання. Для заборони вкажіть Off.
Персистентного з'єднання (persistent connection, keep-alive) - тип віртуального з'єднання між сервером і клієнтом, при якому сервер може обслуговувати понад одного запиту від одного і того ж клієнта в рамках одного і того ж з'єднання, тобто яка не завершується відразу, як тільки сервер обслужив той перший запит клієнта, заради якого дане з'єднання було встановлено, а чекає надходження подальших запитів по тому ж каналу.
MaxKeepAliveRequests100 (за замовчуванням)
Максимальна кількість запитів при одному персистентному з'єднанні.
Значення 0 знімає обмеження (дозволено необмежену кількість запитів).
Для максимального швидкодії рекомендується високе значення.
KeepAliveTimeout15 (за замовчуванням)
Час очікування (в секундах) наступного запиту від того ж клієнта в рамках одного персистентного з'єднання.
StartServers5 (за замовчуванням)
Директива StartServers встановлює число дочірніх процесів. створених при запуску сервера.
Оскільки число процесів динамічно змінюється в залежності від навантаження, то зазвичай немає необхідності налаштовувати цей параметр.
MinSpareServers5 (за замовчуванням)
Директива MinSpareServers встановлює бажане мінімальне число невикористовуваних * дочірніх процесів сервера.
Якщо вільних процесів менше, ніж значення MinSpareServers, то батьківський процес створює нові дочірні процеси з максимальною частотою по 1 в секунду.
Налаштування цього параметра необхідна тільки на дуже завантажених сайтах.
Збільшення цього параметра до великого числа - майже завжди погана ідея!
MaxSpareServers10 (за замовчуванням)
Директива MaxSpareServers встановлює бажане максимальне число невикористовуваних * дочірніх процесів сервера.
Якщо є більше ніж MaxSpareServers невикористовуваних процесів, то батьківський процес вб'є зайві.
Налаштування цього параметра необхідна тільки на дуже завантажених сайтах. Збільшення цього параметра до великого числа - майже завжди погана ідея!
Якщо спробувати встановити значення нижче, ніж MinSpareServers, то Apache автоматично присвоїть це до MinSpareServers + 1.
MaxClients
Це найважливіший параметр prefork MPM, що задає максимальне число дочірніх процесів. яким дозволено запуститься (які будуть створені для обробки запитів).
Значення виставляється великим, щоб обробляти одночасно багато запитів, а меншим для зниження споживання пам'яті!
Скільки Ви вкажете в цій дірректіве, стільки і буде у Вас процесів вставати в чергу на виконання.
MaxRequestsPerChild10000 (за замовчуванням)
Управляє, як часто сервер переробляє процеси. вбиваючи старі і починаючи (запускаючи) нові, тобто тут вказується число запитів, яке дозволено обробляти дочірньому процесу до переповнення.
Ця дірректіва корисна для того, щоб уникнути проблем при тривалій безперервній роботі, якщо Apache (або які він використовував бібліотеки), допускають витік пам'яті або інших ресурсів, так як при переповненні дочірній процес буде примусово завершений.
На більшості систем це не потрібно, але деякі страждають помітними витоками в бібліотеках.
Установка значення в 0 знімає обмеження.
Для запитів KeepAlive. тільки перший запит подсчивается до межі MaxRequestsPerChild. Насправді, це змінює дію обмеження числа зв'язків з дочірнім процесом.
Отже, регулюючи значення цих дірректів, можна домогтися істотного збільшення швидкості роботи Вашого сайту або, навпаки, уповільнити його і викликати нестабільність системи. :)
Успіхів!