Конфигуриране на Apache MPM (prefork, работник, събитие), dlx3

Конфигуриране на Apache MPM (prefork, работник, събитие), dlx3

Apache (известен още като уеб-) - един от най-популярните уеб сървър, който може да работи на множество платформи. Различни среди и платформи могат да приложат същата функционалност по различни начини, така че няма перфектна конфигурация рецепта, във всеки случай изисква индивидуален подход. настройка Правилното услуга ще радват потребителите и спокойна администратор.

За изключване на неизползваните модули вероятно чули всичко, а днес ние ще говорим за (модули Multi-обработка) на MPM - prefork, работник и събитие.

Apache има модулна архитектура, която ви позволява да изберете на функционалността, което трябва да се реализира с помощта на плъгини. В Apache 2.0, модулна архитектура е разширен най-често срещаните функции на уеб сървъра. Сървърът вече е снабден с набор от множество обработка модули (MPM), отговорни за свързване към мрежата, за получаване на искания и за координирането на обработката на детето им процеси.

Можете да използвате таблицата може да се използва за Unix системи, за да се определи същия модул:

Системата има подкрепа

На практика това означава, че за Unix почти винаги ще бъде на разположение събитие, тъй като всички съвременни операционни системи, поддържани от тези две функции. * PHP по подразбиране не поддържа безопасна нишка, така че ако имате нужда от mod_php - използване prefork.

За да проверите кой модул се използва в даден момент, можете да използвате командата:

По подразбиране, свързан Apache 2.4 prefork модул.

При използване на prefork модул всяка заявка се обслужва от отделен процес Apache. Основните предимството prefork - процеси за стабилност са изолирани един от друг и грешка при обработката на искането или не засягат други искания. Родителят е отговорен за стартирането наследствени процеса, услугата за свързване. Apache винаги се опитва да запази в резерв повече от един процес (обикновено по-нататък резервни или неизползвани процеси) на клиентите, не чакайте, докато процесът на детето започва да обслужва тяхно искане.

Един от най-важните насоки за определянето на MPM - MaxRequestWorkers (или MaxClients за версиите под 2.3.13). В действителност, тя определя максималния брой едновременни клиенти и, съответно, на директивата зависи от максималното използване RAM.

Пример конфигурация файл (Apache / 2.2.15 Цент 6)

StartServers. броят на процесите, които се стартират при Apache започва.
MinSpareServers. минимален брой процеси, които се провеждат в резерв.
MaxSpareServers. максималния брой процеси, които се държат в резерв.
ServerLimit. Скоро максимален брой процеси (като цяло).
MaxClients. максимален брой едновременни клиентски свързвания (разрез prefork = максимален брой деца процеси).
MaxRequestsPerChild. Максималният брой заявки, след което процесът на дете се рестартира (позволява да се неутрализира ефектът от изтичане на памет).

За основни настройки трябва да се сменят само MaxClients (MaxRequestWorkers) и ServerLimit, останалите параметри в първия етап можете да оставите по подразбиране.

Изчисление MaxClients (MaxRequestWorkers)

Да кажем, че ние трябва да се разпредели 512Mb за Apache. За да направите това, да разберете колко RAM консумира един процес на Apache (само един в този момент, можете да напишете отделна книга, но за сега имаме достатъчно на метода, описан по-долу): серия PS и открийте PID на процеса на дете (родителят ще се работи като основа), след това изпълнете pmap и изглежда е достъпна за писане / частни параметър в този пример 1776K (1.7Mb).

След това всичко е проста: 512 / 1.7 = 301 - тази стойност ServerLimit и MaxClients (MaxRequestWorkers). В действителност, има и други фигури, използвани в примера новоинсталираните Apache, без товар и без mod_php, и е по-добре да се вземе средна стойност от потреблението на RAM от всички деца процеси, а не стойността на случаен процес и извършват измерванията по време на максимално натоварване, или по време на стрес-тестовете. Ако не знаете какво ще бъде натоварването и колко RAM ще консумира един процес, воден от фигурата на 25MB - 35MB (ако имате намерение да използвате mod_php), това е достатъчно, за да започне, а по-късно се върна към този параметър.

С цел да се знае броя на Apache процеси на браузъра в момента, можете да използвате командата:

Работник съчетава няколко protsessovy (мулти-процес) и многонишковите (многонишковите) сървър. Използването потоци (конци) ни позволява да предлагаме повече заявки с по-малко хардуерни ресурси, отколкото само с няколко сървъра protsessovy (prefork). Въпреки това, той запазва голяма част от стабилността на мулти-protsessovogo сървър посредством множество процеси, всеки от които има множество потоци.

Как работи:
- родителят е отговорен за стартирането на децата процеси;
- всеки процес на детето създава определен брой нишки, ThreadsPerChild на директива и едно слушане конец (слушател резба), който приема новата връзка и ги предава предавания;
- Apache винаги се опитва да поддържа разтегателен резервният поток, които са готови да служат на входящите искания, веднага щом пристигнат. В този случай, клиентът не трябва да чакаме нова тема или процес.

Пример конфигурация файл (Apache / 2.2.15 Цент 6)

StartServers. броят на процесите, които се стартират при Apache започва.
MaxClients. максимален брой едновременни клиентски свързвания (в разрез работник = максимален брой нишки).
MinSpareThreads. минимален брой потоци, които се провеждат в резерв.
MaxSpareThreads. максималния брой потоци, които се провеждат в резерв.
ThreadsPerChild. броят на нишки на процес.
MaxRequestsPerChild. Максималният брой заявки, след което процесът на дете се рестартира (позволява да се неутрализира ефектът от изтичане на памет).
ThreadLimit. максималния брой потоци за един процес (не може да се променя без да се рестартира сървъра Apache, за разлика от ThreadsPerChild)

Възможно е да има ситуация, в която процесът се намира MaxRequestsPerChild ще изчака завършването и спре да приема нови връзки, но това ще бъде един поток, който все още се обработва връзка клиент. Така че можем да достигнат минималния праг за MaxClients (MaxRequestWorkers), въпреки че действителната искане на клиента се обработва много по-малко. За да се избегне такова поведение на сървъра, може да се зададе 0 и MaxRequestsPerChild MaxSpareThreads = MaxClients (MaxRequestWorkers).

Изчисляване ServerLimit и MaxClients (MaxRequestWorkers)

Веригата остава един и същ, само един поглед процес консумация RAM напред ServerLimit. MaxClients (MaxRequestWorkers) се изчислява като ServerLimit * ThreadsPerChild.

Събитие позволява да обслужват голям брой едновременни връзки чрез прехвърлянето на обработка на молба за работа на отделни потоци (слушатели нишки).

Това MPM има за цел да реши проблема "запази жива" в HTTP. След като клиентът първо ще молба, той може да напусне връзката отворена чрез изпращане на повече заявки за използване на същия контакт, за да избегнете необходимостта от създаване на нови TCP-връзка. Ако prefork и работник Apache спестява процес дете / нишката чака данни от клиента, което води до неефективно потребление на ресурсите. За да се реши този проблем, събитие използва специален конец (слушател нишка) за всеки процес, за да се справят с контакти в състояние слушане, запази жива и контакти, за които тя остава само за прехвърляне на данни към клиента. Така конец работник получава готов искане и освободен непосредствено след преработката му.

Директива, са същите като тези на работника MPM, принцип изчисление RAM остава същата.

  • Ако използвате един куп Apache + PHP (mod_fcgid, mod_fastcgi, mod_proxy_fcgi), струва си да се обръща внимание на работника или събитие.
  • Ако имате по-стара samopisnaya CMS или използвате mod_php - по нещо за вас, prefork, вероятно ще бъде единствената налична опция.
  • Не копирате настройките от интернет, за да се изчислят параметрите за вашата система, като направите теста след конфигурация.

Ако ви харесва, да го споделите