Apache Performance Tuning: MPM-moduler

  1. Apache Performance Tuning: Utbytesminne
  2. Apache Performance Tuning: MPM-moduler
  3. Avstämning av prestanda för Apache: MPM-direktiv
  4. Avstämning av prestanda i Apache: Konfigurera MPM-direktiv
  5. Hur man aktiverar Piped Logging i Apache

Lästid: 3 minuter

Nyckelstenen för att förstå Apache-serverns prestanda är utan tvekan Multiprocessing Modules (MPMs). Dessa moduler bestämmer grunden för hur Apache hanterar multiprocessing. Multiprocessing innebär att man kör flera operationer samtidigt i ett system med flera centrala processorenheter (CPU Cores).

Det finns många MPM:er att välja mellan, men den här artikeln fokuserar på de vanligaste modulerna som finns i Liquid Web Linux-baserade VPS-servrar. Dessa moduler är:

  • MPM Prefork
  • MPM Worker
  • MPM Event
  • Andra MPMs
  • Vilken MPM är bäst?

MPM Prefork

Den självreglerande MPM Prefork har fått sitt namn från hur den förgrenar sig eller kopierar sig själv till nya identiska processer i förebyggande syfte för att vänta på inkommande förfrågningar. MPM Prefork är ett processbaserat tillvägagångssätt för multiprocessing utan trådar, och MPM Prefork kör Apache i en enda huvudprocess för den överordnade servern. Denna moderprocess är ansvarig för att hantera alla ytterligare underordnade servrar som utgör dess serverpool. När MPM Prefork används hanterar varje barnserver endast en enda begäran. Detta fokus ger fullständig isolering från andra förfrågningar som hanteras på servern. MPM Prefork används vanligtvis av kompatibilitetsskäl när bibliotek/programvara utan trådar, som mod_php (DSO), krävs. Ur optimeringssynpunkt kan MPM Prefork ha stora brister jämfört med flertrådiga lösningar och kräver betydligt mer resurser för att nå liknande trafiknivåer som en trådad MPM. Den är resurskrävande på grund av att den måste skapa hela kopior av Apache för varje begäran.

Note:
Undervik att använda MPM Prefork när det är möjligt. Dess oförmåga att skala väl med ökad trafik kommer snabbt att överstiga den tillgängliga maskinvaran i de flesta systemkonfigurationer.

MPM Worker

En hybridwebbserver med prefork, flera trådar och flera bearbetningar. På samma sätt som MPM Prefork använder MPM Worker samma tillvägagångssätt med en enda huvudprocess som styr alla barn inom sin serverpool. Till skillnad från MPM Prefork är dessa barn dock flertrådiga processer som kan hantera dussintals trådar (förfrågningar) samtidigt. MPM Worker har lagt grunden för flertrådig multiprocessing i Apache-servrar som blev stabil i Apache 2.2. Den trådade konfigurationen gör det möjligt för Apache att hantera hundratals förfrågningar med lätthet samtidigt som endast ett dussintal barnprocesser finns kvar i minnet. MPM Worker utgör både en lösning med hög kapacitet och låga resurser för webbtjänster.

Note
Direktivet KeepAliveTimeOut definierar för närvarande hur lång tid Apache ska vänta på begäranden. När KeepAlive används med MPM Worker bör du använda en så liten KeepAliveTimeout som möjligt (helst 1 sekund).

MPM Event

Med utgångspunkt i källkoden för MPM Worker delar MPM Event konfigurationsdirektiv med MPM Worker. Den fungerar nästan identiskt med MPM Worker utom när det gäller hanteringen av KeepAlive-förfrågningar. MPM Event använder en särskild Listener-tråd i varje underprocess. Denna lyssnartråd ansvarar för att dirigera inkommande förfrågningar till en tillgänglig arbetstråd. Listening-tråden löser problemet med MPM Worker som låser hela trådar i väntan på KeepAliveTimeout. Med lyssnarmetoden i MPM Event säkerställs att arbetstrådar inte ”fastnar” i väntan på att KeepAliveTimeout ska löpa ut. Denna metod gör att så många arbetstrådar som möjligt hanterar så många förfrågningar som möjligt.

Serverlimit Information

Tips:
MPM Event är stabilt i Apache 2.4, äldre versioner kan använda MPM Worker som ett alternativ.

Andra MPM:er

Det finns ett antal ytterligare MPM:er tillgängliga. Dessa är vanligtvis en del av Apaches integration i andra operativsystem än Unix-baserade system. Dessa har specifika MPM:er som är krav för att använda Apache i deras respektive systemtyper. Dessa typer av MPMs ligger utanför den här artikelns räckvidd. Du kan hitta mer information om specifika MPM i avsnittet MPM Defaults i den officiella Apache-dokumentationen.

Note:
Vi rekommenderar att man håller sig borta från experimentella och instabila MPM:er. Den opålitliga karaktären hos dessa typer av programvara gör att de inte kan stödjas.

Vilken MPM är bäst?

När man överväger optimering är det viktigt att förstå att det inte finns någon Apache-konfiguration som passar alla. För att korrekt välja en MPM krävs en analys av många rörliga variabler som trafik, webbplatsens kod, servertyp, PHP-handläggare och tillgänglig hårdvara. Varje server är unik, vilket gör att det bästa MPM-valet är ett helt subjektivt val.

Om din programkod inte har stöd för multitrådning kommer ditt val oundvikligen att vara MPM Prefork, enbart av kompatibilitetsskäl. MPM Prefork innehåller programvarumoduler som mod_php (DSO). MPM Worker utan KeepAlive fungerar mycket bra om din tillämpning är ett högpresterande API-system med balanserad belastning. Skalbarheten och flexibiliteten hos MPM Event är ett bra val för att vara värd för flera små till medelstora webbplatser i en delad värdkonfiguration.

De flesta enkla serveruppsättningar fungerar bra med den självstyrande standardkonfigurationen för MPM Event, vilket gör den till en idealisk utgångspunkt för optimeringsinställning. När den väl har valts kan en MPM sedan gå vidare till konfigurationsdirektiv för att se över vilka inställningar som gäller för serverprestanda och optimering. Du kan också läsa vår tidigare artikel i den här serien, Apache Performance Tuning:

Serie Navigation << Föregående artikelNästa artikel >>

Lämna en kommentar