Apache MPMs Explained

Apache-webbservern är den mest populära webbservern i världen. Detta beror delvis på dess modulära konstruktion. I Apache 2 infördes Multi-Processing Modules, eller MPMs. MPM:erna ändrar webbserverns grundläggande funktionalitet. Det gör de genom att ändra hur Apache lyssnar på nätverket, tar emot och hanterar förfrågningar. En stor del av denna funktionalitet är ganska teknisk och ligger utanför ramen för den här artikeln. I den här artikeln förklaras kortfattat vad de olika MPM:erna är och hur de fungerar. Mer detaljerad information om de olika MPM:erna finns i Apache Documentation.

Introduktion

Alla versioner av Apache 2.0 och senare kör någon form av MPM, och det finns en mängd olika MPM:er för de olika operativsystemen. Den här artikeln kommer endast att fokusera på de som finns tillgängliga för operativsystemet Linux. Först vill du fastställa vilken version av Apache och vilken MPM som din server för närvarande kör. Du kan avgöra detta genom att köra följande kommando på kommandoraden:

httpd -V | grep -i 'version\|mpm'

Det kommandot ger dig ett utdata som ser ut så här:

# httpd -V | grep -i 'version\|mpm'
Server version: Apache/2.4.16 (Unix)
Server MPM: event

I det här fallet kör servern Apache 2.4 och använder Event MPM. Utmatningen kan se annorlunda ut beroende på vilken Apache-version och MPM som din server kör för närvarande.

Det är enkelt att byta MPM på en cPanel-server. Kör bara EasyApache-skriptet och välj den MPM du vill ha bland de tillgängliga. Listan som finns kommer att vara annorlunda beroende på om du kör Apache 2.0, Apache 2.2 eller Apache 2.4. På Apache-versioner under 2.4 anses endast Prefork och Worker vara stabila. Event MPM anses vara experimentell på Apache 2.2 och bör endast användas med Apache 2.4 eller senare.

Om du inte känner dig bekväm med att köra EasyApache själv, vänligen kontakta Heroic Support® så hjälper vi dig gärna.

Prefork

Med Prefork-modulen installerad är Apache en icke-trådad, pre-forking webbserver. Det innebär att varje Apache-barnprocess innehåller en enda tråd och hanterar en begäran i taget. På grund av detta förbrukar den mer resurser än de trådade MPM:erna: Worker och Event.

Prefork är standard MPM, så om ingen MPM är vald i EasyApache kommer Prefork att väljas. Det är fortfarande det bästa valet om Apache måste använda bibliotek som inte är trådsäkra, t.ex. mod_php (DSO), och är idealiskt om isolering av processer är viktigt.

Worker

Med Worker MPM förvandlas Apache till en webbserver med flera processer och flera trådar. Till skillnad från Prefork kan varje barnprocess under Worker ha flera trådar. Worker kan därför hantera fler förfrågningar med färre resurser än Prefork. Worker rekommenderas i allmänhet för servrar med hög trafik som kör Apache-versioner före 2.4. Worker är dock inkompatibel med bibliotek som inte är trådsäkra. Om du behöver köra något som inte är trådsäkert måste du hålla dig till Prefork.

Event

Varje process under Event kan också innehålla flera trådar, men till skillnad från Worker kan var och en av dem utföra mer än en uppgift. Apache har de lägsta resurskraven när den används med Event MPM.

Event stöds dock endast på servrar som kör Apache 2.4. Under Apache 2.2 betraktas Event som experimentellt och är inkompatibelt med vissa moduler i äldre versioner av Apache. På Apache 2.2-servrar med hög trafik där Apache har haft problem med minnet kan en uppgradering av Apache för att dra nytta av Event MPM ändå ge betydande resultat.

De andra MPM:erna

Det finns ett antal andra experimentella MPM:er som Threadpool, Perchild och Leader. Liquid Web avråder från att köra dessa MPM:er. Eftersom de är experimentella finns det inga garantier för att de kommer att fungera som förväntat och vi kan varken stödja dem eller garantera att vi kommer att kunna åtgärda dem.

Förstärkningen av Multi Process Modules till Apache har ökat dess kraft och flexibilitet. MPM:erna gör det möjligt för användarna att ändra kärnans beteende. Detta ökar vad en användare kan göra med Apache utan att behöva installera ytterligare programvara. Om du har några frågor om detta eller något annat är du välkommen att ringa Heroic Support®.