Apache Scoreboard: En detaljeret forståelse af serverbelastningen

Apache Scoreboard viser mig i realtid, hvor mange workers der lige nu læser forespørgsler, sender svar eller venter i tomgang, og jeg bruger det til at vurdere Serverbelastning uden gætterier. Via mod_status får jeg struktureret adgang til statusdataene, fortolker symboler, måler gennemstrømningen og udleder heraf konkrete Trin i tuningen fra.

Centrale punkter

  • Status i realtid alle medarbejdere forstår og hurtigt kan identificere flaskehalse.
  • mod_status Sikre driften og udnytte ExtendedStatus på en fornuftig måde.
  • Nøgletal hvordan man systematisk analyserer Req/s, Busy/Idle og CPU.
  • Symboler fortolke resultattavlen og handle målrettet.
  • Overvågning automatisere og indstille alarmer på baggrund af data.

Hvad er Apache Scoreboard?

I Scoreboard gemmer Apache en aktuel status for hver worker, f.eks. »Læser«, »Sender« eller »Inaktiv«, og dermed kan jeg se Arbejdsfordeling af processerne. Dataene findes internt og sendes via mod_status til brugergrænsefladen, enten som HTML eller i maskinlæsbar form. Der tjekker jeg travle arbejdsprocesser, inaktive arbejdsprocesser, CPU-belastning, oppetid samt adgangsforespørgsler og bytes. Jeg finder især det meget detaljerede overblik over de enkelte workers nyttigt, fordi jeg kan se behandlingstid og aktiv host. På den måde kan jeg træffe en velbegrundet beslutning om, hvorvidt der mangler kapacitet, om forespørgsler tager for lang tid, eller om Keep-Alive-slots er blokeret; disse Gennemsigtighed sparer tid ved årsagsanalysen.

Sådan får jeg adgang via mod_status

Via /server-status åbner jeg en overskuelig HTML-side; via /server-status?auto får jeg en kortfattet tekstudskrift for Overvågning og scripts. I produktive miljøer aktiverer jeg ExtendedStatus On, fordi de ekstra målinger pr. worker giver mig den nødvendige kontekst. Jeg begrænser adgangen strengt til administratornetværk eller enkelte værter og lader ikke siden være offentligt tilgængelig. Til en manuel gennemgang er en kort browsersession tilstrækkelig, mens jeg ved løbende overvågning integrerer den automatiske visning i et overvågningssystem. På den måde holder jeg omkostningerne nede og sikrer statusdata er fornuftigt.

Vurdere sikker konfiguration og overhead

Jeg overvåger /server-status løbende og vælger alt efter situationen mellem IP-godkendelse, autentificering eller en intern admin-VHost. ExtendedStatus medfører en målbar, men i praksis ubetydelig Overhead; jeg aktiverer den permanent, hvis jeg også bruger dataene i overvågningen, eller kun midlertidigt ved ad hoc-analyser. En overskuelig eksempelkonfiguration hjælper mig med at undgå fejl:

Aktiver #
ExtendedStatus On

Gør #-status kun tilgængelig internt

  SetHandler server-status

  # Variant 1: IP-baseret
  Require ip 10.0.0.0/8 192.168.0.0/16 ::1

  # Variant 2: Basic-Auth (f.eks. i tillæg til IP)
  #AuthType Basic
  #AuthName "Server Status"
  #AuthUserFile "/etc/httpd/conf/.htpasswd"
  #Require valid-user

Jeg sørger for, at siden også er tilgængelig uden for produktions-VHosts (f.eks. via en intern adresse), så der ikke er nogen omskrivningsregler eller proxyruter, der forstyrrer. Når jeg afslutter fejlfindingsfaserne, kontrollerer jeg, at kun de nødvendige oplysninger offentliggøres.

Hurtig gennemgang af resultattavlens symboler

Når der opstår forstyrrelser, kigger jeg først på symbolerne, fordi et tæt mønster af R og W afslører akut belastning, mens mange _ signalerer ro; disse Kodning fremskynder diagnosen. K viser mig også åbne Keep-Alive-forbindelser, der binder arbejdere, hvis timeout-indstillingen er forkert. Et fokus på D indikerer DNS-opslag, der forsinker svarene. Hyppige L-poster tyder på blokerende logning og lagringsundersystemer. Med et par blik kan jeg således identificere den dominerende flaskehals og iværksætte målrettede Foranstaltninger.

Symbol Betydning Hurtig meddelelse
_ Inaktiv medarbejder Tilstrækkelig Kapacitet til stede
R Anmodning om læsning Kontroller netværksforsinkelsen, eller Kunde
W Afsendelse af svar Backend-tid og outputstørrelse analysere
K Keep-Alive Timeouts og slot-binding kontrollere
D DNS-opslag Deaktivere reverse DNS eller Cache
L Logning Asynkron logning og I/O Tjek
C Afslutning Normalt forbindelsesafslutning, kort synlig
G En elegant afslutning Afsluttet forespørgsel, Worker rydder op
I Oprydning ved inaktivitet Ukritisk, arbejdstager korrigeret
. Inaktiv En rolig periode, ressourcer gratis

Genkende avancerede mønstre og angrebsprofiler

Jeg vurderer ikke kun enkelte tilstande, men også Varighed og fordelingen af symbolerne. Mange langvarige R-tilstande kombineret med lav netværksbåndbredde tyder på langsomme klienter eller Slowloris-mønstre; i så fald begrænser jeg læsetiderne pr. forespørgsel (f.eks. med RequestReadTimeout) og indstiller realistiske minimumsrater. Hvis W-tilstande med et højt antal bytes pr. forespørgsel dominerer, er det snarere båndbredden eller lagerpladsen, der er begrænsende. Hvis der samtidig forekommer en ophobning af D- og L-tilstande, prioriterer jeg navneopløsning og log-I/O. Det afgørende er, om mønstre bred (alle medarbejdere) eller lokal (kun én VHost eller sti) – på den måde kan jeg hurtigere finde hotspots i applikationen.

Nøgletal til analyse af webservere

Antallet af anmodninger pr. sekund viser mig gennemstrømningen, men jeg vurderer samtidig antallet af byte pr. sekund og antallet af byte pr. anmodning for nyttelast. Forholdet mellem travlhed og inaktivitet afslører, om der mangler slots, eller om indstillingerne er for konservative. Jeg korrelerer CPU-udnyttelsen med svartiderne for at skelne mellem CPU-begrænsede og I/O-begrænsede situationer. Oppetiden hjælper med at skelne mellem nye genstarter og reelle tendenser. Ud fra denne kombination udleder jeg konkrete optimeringsmuligheder for worker, keep-alive og Timeouts fra.

Grænseværdier og alarmering i praksis

Jeg indstiller alarmer ikke på basis af øjebliksværdier, men på basis af glidende gennemsnit og Varighed. Følgende heuristikker har f.eks. vist sig at fungere godt: Idle 4:1 over samme tidsrum tyder på overbelastning. Req/s falder ved konstant trafik, mens »Busy« forbliver konstant – så ligger der ofte et backend-problem bag. K-andel > 50 % i primetime tyder på for generøs keep-alive. Jeg supplerer tærskelværdierne med trendalarmer (stigende svartider ved samme belastning) og Sæsonudsving (Dags- og ugemønstre), så jeg kan skelne mellem reelle ændringer og normal adfærd.

Placer ScoreboardFile korrekt

På nogle platforme skriver Apache statusdata til en scoreboard-fil, og jeg placerer den i et hurtigt, sikkert bibliotek som f.eks. /var/run/httpd; det øger pålidelighed. Jeg forhindrer, at flere instanser bruger den samme fil, da det ellers kan føre til forvrængede værdier. Nogle værktøjer læser direkte fra filen, hvilket gør HTTP-endepunktet overflødigt. Det er attraktivt med hensyn til sikkerhed og ydeevne, forudsat at tilladelserne er i orden. Jeg dokumenterer sti og adgang, så vedligeholdelse og Overvågning forblive konsekvent.

Særlige forhold vedrørende operativsystemer og containere

Jeg sikrer, at grænserne for filbeskrivere, backlogs og midlertidige stier passer til arbejdsbelastningen. Under systemd kontrollerer jeg, om PrivateTmp eller ReadOnlyPaths påvirker Scoreboard-stien. I containere planlægger jeg lagerpladsbehovet pr. proces/tråd konservativt og placerer Scoreboard-stien i en skrivbar Runtime-mappe. Til spidsbelastning tilpasser jeg kerneparametrene:

# Eksempler på sysctl-værdier (test og dokumenter på systemniveau)
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096
fs.file-max = 1048576

Desuden kalibrerer jeg `ulimit -n` for Apache-tjenesten, så den når op på den maksimale samtidighed passer (tommelfingerregel: åbne FD’er ≈ 2–3 × MaxRequestWorkers i proxy-tunge opsætninger). Efter ændringer holder jeg øje med resultattavlen igen for at bekræfte effekterne.

Typiske anvendelsestilfælde: Identificering af overbelastede medarbejdere

Hvis næsten alle slots er optaget med R eller W, og der næsten ikke vises _‑-poster, kører serveren på sin Grænse. Derefter tjekker jeg MaxRequestWorkers, responstider og blokerende backends. Hvis flere workers ikke hjælper, ligger flaskehalsen ofte i applikationen, databasen eller lagringssystemet. Via /server-status?auto følger jeg udviklingen i intervaller i stedet for blot at se på øjebliksbilleder. På den måde beslutter jeg, om jeg skal justere indstillingerne, styrke cachen eller Skalering planlægge.

Ressourcemodel og kapacitetsformler

Jeg beregner kapaciteterne på forhånd, så jeg undgår hukommelsesflaskehalse. For Prefork gælder: Hukommelse ≈ antal processer × RSS pr. proces. For Worker/Event: Hukommelse ≈ antal processer × (RSS pr. proces) + tråde × trådoverhead. Jeg måler den faktiske RSS med systemets værktøjer og indregner sikkerhedsmargener. Et lille eksempel: 20 processer × 50 MB + 500 tråde × 1 MB giver ≈ 1,5 GB, plus cache og OS-buffer. Ud fra dette udleder jeg MaxRequestWorkers, ServerLimit og ThreadsPerChild. Jeg tager desuden højde for, at moduler som SSL, PHP eller reverse-proxying øger hukommelsesforbruget pr. Tråd kan øge; derfor tester jeg under reel belastning, ikke kun i tomgang.

Fortolke køer og ventetid

Hvis forespørgsler forbliver længe i »Accept«- eller »Skriv«-tilstand, stiger den oplevede ventetid, og jeg ser nærmere på køernes længde samt »Accept«-backlog; resultattavlen leverer værdifulde oplysninger herom Indikatorer. Denne artikel giver mig en mere uddybende forklaring på køer, ventetider og behandling af anmodninger: Køer og ventetid. Ud fra disse grundlæggende principper vurderer jeg, om flaskehalse opstår før, i eller efter Apache. Jeg tolererer korte spidsbelastninger, men løser vedvarende overbelastninger ved at øge kapaciteten eller justere arkitekturen. På den måde forhindrer jeg, at timeouts eskalerer, og at klienter afbryde.

Oprette forbindelse til backend og proxy

I miljøer med mange proxyer kan jeg ud fra W-faser afgøre, om workerne er på Opstrøms Vente. ExtendedStatus viser mig VHost og den anmodede ressource; på den måde kan jeg sammenholde stier med langsomme backends. Jeg indstiller realistiske timeouts (TimeOut, ProxyTimeout) og kontrollerer forbindelsespooling, så tråde ikke blokeres unødigt. Hvis pipelinen bliver overbelastet ved uploads, regulerer jeg læsehastighederne pr. klient og beskytter mig mod langsomme afsendere. Hvis der genereres mange store svar, anvender jeg komprimering, chunking og Caching overvejes for at forkorte W-tiderne.

Indstil Keep-Alive målrettet

Mange K-poster tyder på, at klienter lader forbindelser stå åbne; dette fremskynder efterfølgende anmodninger, men kan optage slots Bind. Jeg indstiller timeouts således, at reelle gentagelser drager fordel af dem, uden at inaktivitet blokeres for længe. På meget trafikerede websteder hjælper en proxy, der er placeret foran, mig med at samle Keep-Alive-forbindelser effektivt. Til detaljer om finjustering bruger jeg denne vejledning: Indstilling af Keep-Alive-timeout. Med en fornuftig timeout mindskes slot-binding, og serveren forbliver under belastning lydhør.

HTTP/2, TLS og MPM i samspil

Med HTTP/2 oplever jeg som regel færre K-bindinger pr. klient, fordi flere strømme deler en forbindelse dele. Event-MPM udnytter her sine styrker: Keep-Alive håndteres mere effektivt, mens det aktive arbejde forbliver forbeholdt trådene. TLS øger CPU-forbruget pr. forbindelse; jeg overvåger, om høje W-andele korrelerer med højt CPU-forbrug, og optimerer krypteringssuiter samt genoptagelse af sessioner. I statusoversigterne kan jeg for hver VHost se, om HTTP/2- eller TLS-termineringsstier dominerer, og tilpasser kapaciteten i overensstemmelse hermed (f.eks. flere tråde i stedet for flere processer, hvis kontekstskift er ressourcekrævende).

DNS-opslag og logning under kontrol

Hvis D dukker op flere gange i resultatlisten, tjekker jeg reverse-DNS og aktiverer en lokal cache eller deaktiverer opslag; det sænker Forsinkelse. Hvis jeg ser mange L-poster, bremser logningen behandlingen, så jeg fordeler logfilerne, bruger hurtigere lagring eller asynkrone pipelines. Roterende logfiler konfigurerer jeg således, at der ikke opstår flush-spidsbelastninger. Samtidig måler jeg skrive-I/O og fillåse for at bryde blokerende mønstre. På den måde vinder jeg bearbejdningstid tilbage og aflaster Arbejder.

Integration i overvågningssystemer

Jeg indsamler periodisk /server-status?auto, gemmer værdierne som en tidsserie og visualiserer Busy vs. Idle, Req/s, Bytes/s og CPU-belastning på Dashboards. Alarmer definerer tærskelværdier for slots, der konstant er fulde, stigende svartider eller usædvanlige trafikmønstre. Med annoteringer markerer jeg deploymenter, så jeg straks kan se effekterne. Denne historik skelner mellem engangstoppe og reelle tendenser. På den måde styrer jeg kapaciteten planmæssigt og forhindrer Overraskelser.

Automatiseret registrering ved hjælp af scripts

Til hurtige tjek er et letvægts-script, der analyserer Auto-visningen og kun viser de vigtigste tal, nok for mig. Jeg holder forespørgselsintervallerne moderate (f.eks. 10–30 sekunder) for at holde overheadet lavt, og jeg mærker hver prøve med host, VHost og miljø.

#!/bin/sh
URL="http://127.0.0.1/server-status?auto"
curl -s "$URL" | awk -F': ' '
  /BusyWorkers/ {busy=$2}
  /IdleWorkers/ {idle=$2}
  /ReqPerSec/   {rps=$2}
  /BytesPerSec/ {bps=$2}
  END { printf("busy=%s idle=%s rps=%.2f bps=%.0f\n", busy, idle, rps, bps) }
'

I større miljøer aggregerer jeg desuden tiderne pr. worker, tildeler dem til VHosts og beregner Kvantil for responstider. På den måde kan jeg se, om det kun er en del af brugerne, der oplever problemer, eller om flertallet er berørt.

MPM og kapacitetsplanlægning

MPM fastlægger, hvordan Apache behandler forbindelser; Scoreboard-data viser mig, om det er processer eller tråde, der udgør den begrænsende faktor Faktor er. Til udvælgelsen og finjusteringen sammenligner jeg event og worker, måler inaktivitetstider, keep-alive-binding og kontekstskift. Denne artikel giver en kortfattet sammenligning: Begivenhed vs. medarbejder MPM. Efter ændringer tjekker jeg igen Busy/Idle og Req/s for at dokumentere effekterne. På den måde træffer jeg datadrevne beslutninger og øger Effektivitet.

Graceful Restart, rullende implementeringer og vedligeholdelse

Ved implementeringer eller konfigurationsændringer foretrækker jeg at udløse en yndefuld Genstart afbrudt. I Scoreboard kan jeg se det på de mange G-tilstande, mens nye processer starter, og gamle afsluttes ordentligt. Jeg planlægger rullende ændringer, så der er tilstrækkelig ledig kapacitet tilbage: først reducerer jeg belastningen, derefter genstarter jeg graceful, og til sidst de resterende noder. Langvarige G-faser er et tegn på, at gamle processer venter på langsomme anmodninger – så tjekker jeg timeouts og keep-alive for at forkorte omskiftningstiden.

Trin for trin mod en velunderbygget analyse

Jeg aktiverer mod_status, sikrer adgangen og slår ExtendedStatus til, så jeg kan se alle Detaljer får. Derefter tjekker jeg HTML-siden i browseren og lærer symbolernes mønster i live-drift at kende. I næste trin integrerer jeg /server-status?auto i min overvågning og validerer målingerne. Derefter optimerer jeg følgende punkter én efter én: antal arbejdere, keep-alive, timeouts, caching og applikationsstier. Jeg måler hver ændring på ny, indtil Req/s, responstid og Busy/Idle igen ligger inden for Grønt område løgn.

Resumé: Apache Scoreboard som kompas

Apache Scoreboard giver mig et klart og umiddelbart anvendeligt overblik over udnyttelsesgraden, flaskehalse og adfærden hos Arbejder. Med mod_status, ExtendedStatus og grundig overvågning omdanner jeg rådata til pålidelige beslutninger. Indikatorer og målinger viser, om jeg skal udvide kapaciteten, justere timeout-tiderne eller tage fat på selve applikationen. En lille ændring af Keep-Alive eller MPM kan have stor effekt, hvis dataene er korrekte. Den, der tolker tegnene rigtigt, holder Apache kørende under belastning lydhør og planlægbar.

Aktuelle artikler

Serverrum med Apache-webserver og synlig overvågning af ydeevnen
Plesk webserver

Apache Scoreboard: En detaljeret forståelse af serverbelastningen

Find ud af, hvordan Apache Scoreboard kan hjælpe dig med at analysere webserveren: Lær, hvordan du konfigurerer mod_status, fortolker Scoreboard-ikonerne og bruger Apache-overvågning til at optimere serverudnyttelsen.