Vraag Welke te installeren: Apache Worker of Prefork? Wat zijn de (dis-) voordelen van elk?


Gebaseerd op de beschrijvingen voor zowel de prefork en arbeider MPM, het lijkt erop dat het type prefork enigszins verouderd is, maar ik kan niet echt een goede vergelijking van de twee typen vinden.

Wat ik graag zou willen weten:

  • Wat zijn de verschillen tussen de twee versies?
  • Wat zijn de (dis-) voordelen van elk servertype?
  • Bestaan ​​er basisrichtlijnen voor welk type te kiezen op basis van de voorwaarden?
  • Zijn er grote prestatieverschillen tussen de twee?

54
2017-07-24 08:47


oorsprong


Zien Hoe selecteer ik welke Apache MPM moet worden gebruikt? - Janus Troelsen


antwoorden:


Zoals de docs zeggen, moet u de prefork MPM gebruiken als u niet wilt opschroeven voor compatibiliteit met niet-thread-veilige bibliotheken. Typisch, elke niet-triviale Apache-module (mod_php - of, meer precies, de talloze extensies en bibliotheken waarnaar het linkt - omdat het het canonieke voorbeeld is) heeft een soort niet-thread-veilige bibliotheek (of heeft niet-thread-safe code), tenzij je gebruik een mooie stock Apache-installatie, ik ga voor de prefork MPM.


39
2017-07-24 09:04



Ik zou de MPM van de werknemer hebben aanbevolen, tenzij je PHP gebruikt. Werknemer is de aanbevolen MPM van apache en geeft betere prestaties en lagere overheadkosten. Het is alleen dat PHP-ontwikkelaar nog nooit gehoord heeft van thread-veiligheid die je nodig hebt om prefork te gebruiken. - David Pashley
PHP is al heel lang thread safe. Ze suggereren alleen het gebruik van pre-forkers omdat ze niet kunnen bepalen wat andere bibliotheken doen. Sluit het beschuldigen van PHP af voor andere ontwikkelaars inacties. - Alister Bulman
PHP is mogelijk thread safe (hoewel ik het betwijfel), maar alle bibliotheken waar het naar linkt zijn dat zeker niet. Hier voeren we een paar vrij grote PHP-applicaties uit en om de paar maanden proberen we over te schakelen van prefork naar worker, maar we krijgen meteen corrupte data. - Aleksandar Ivanisevic
Ten minste de functie veranderende ENV-variabele is niet thread safe, setlocal php.net/manual/en/function.setlocale.php is een veelvoorkomend voorbeeld daarvan. - radius
Eén opmerking: deze problemen zijn niet van toepassing als PHP is bijgevoegd, bijvoorbeeld met php-fpm via FastCGI. Dan is de MPM van de werknemer prima - dan zal de fpm elke PHP-aanvraag in een eigen proces uitvoeren terwijl de Apache thread kan uitvoeren. Het PHP-Thread-veiligheidsprobleem voorkomt alleen dat je het gebruikt mod_php, die PHP uitvoert binnen het Apache-proces. - mschuett


De klassieke oplossing voor het uitvoeren van onveilige extensies bij het bedienen van grote aantallen (> 100) gelijktijdige verbindingen is om PHP uit te voeren op fastCGI (mod_fcgid, een native apache-module) en proxy dynamische verzoeken aan die van een apache-instantie die de Worker MPM uitvoert.

Hiermee kunt u opschalen van een paar honderd tot meer dan 1000 gelijktijdige verbindingen met een bescheiden hoeveelheid geheugen (4 ~ 8 GB) bij het bedienen van een mix van statische en dynamische inhoud.

Natuurlijk moet u ook front-end cacheoplossingen onderzoeken als onderdeel van uw algemene inzet (memcached, vernis).

Of upgrade naar apache 2.4 en de native versie evenement MPM, die gelijktijdigheid op een veel betere manier afhandelt (threads worden afgevuurd na verbinding, niet wachtend om te worden ondervraagd.)


12
2018-04-02 13:21



kun je de mpm-reactie van het evenement uitbreiden? Hoe komt het ten opzichte van mpm-worker? - Sirex
Hoewel de MPM van de medewerker al op threads was gebaseerd, en dus veel sneller om te starten en lichter om te worden uitgevoerd, ondervraagt ​​de gebeurtenis-MPM niet langer de socket - deze wordt op de hoogte gebracht van de activiteit; daarom, "evenement". - adaptr
dus het zou beter moeten werken op sites met veel verkeer (13 k / sec)? - Sirex


Het is ongeveer 3 jaar geleden dat de vraag werd gepost, maar ik zou aanraden om samen met werknemer MPM te gaan in plaats van voorvork, zelfs als je PHP gebruikt, om de betere prestaties te krijgen.

Wat de verschillen betreft, is pre-fork niet-threaded, vandaar dat de server een proces voor elke client aanvraagt ​​(het anticipeert in afwachting van nieuwe verzoeken zodat forking niet in de responstijd opslokt). Omdat aanvragen in een afzonderlijk proces server zijn, belast dit meestal uw geheugen en CPU veel meer dan. De arbeider brengt multi-threading die lichter is en een beter geheugengebruik heeft.


6
2017-10-21 17:02





Dit is iets heel speciaals voor wat je serveert. Als u veel kleine statische verbindingen maakt, worden de threads lichter en sneller. Als je maar een paar grote apps hebt die voortdurend worden uitgezet, kan prefork een voorsprong hebben vanwege zijn volwassenheid en stabiliteit. Waarom niet gewoon instellen wat je nodig hebt, een test, de MPM-module verwisselen, opnieuw proberen, zien welke het beste bij je past?


2
2017-07-24 13:33



Je kunt de MPM niet arbitrair "uitruilen" in apache 2.2; het is ingesteld op compileertijd. - adaptr
Dat kan met apt of RPM's. Debian heeft verschillende Apache 2-pakketten, afhankelijk van de stijl die u verkiest. - Brendan Byrd


die moet op het type en soort van verkeer dat u zal hebben. En ook eerst moet u het belangrijkste verschil tussen de prefork en de werknemer begrijpen. Ik hoop dat het onderstaande artikel je zal helpen erachter te komen! http://slashroot.in/how-is-nginx-different-from-apache


1
2017-11-16 15:30



Wij geven de voorkeur aan antwoorden om inhoud te hebben, geen links naar inhoud. Als u een samenvatting kunt geven van wat er op het link-target staat, is dat de beste methode. Link-rot gebeurt. - sysadmin1138♦
Vraag was over Apache (nginx is geen apache) en de relatieve verdiensten van prefork of threads (nginx gebruikt geen van beide) - symcbean