Blog članak

Apache swap thrashing: zašto previše agresivan tuning ruši servere

Saznajte kako agresivni Apache limiti mogu gurnuti server u swap thrashing i kako to vodi do usporavanja, nestabilnosti i rušenja.

Prije nego što uđemo u detalje Apache tuninga, trebamo razumjeti što se događa kada VPS ili dedicated server postane neodazivan zbog loše optimizirane konfiguracije.

Pretjerano tuniran server konfiguriran je tako da dopušta više simultanih zahtjeva, kroz ServerLimit, nego što njegov hardver realno može podnijeti. Takvo podešen server ima tipping point, a kada ga dosegne, završi u trajnom swap scenariju. To znači da kernel stalno čita i zapisuje podatke u swap datoteku i iz nje.

Swap datoteke imaju višestruko sporiji read/write pristup od standardne memorije. Njihova latencija stvara usko grlo dok kernel pokušava premještati podatke brže nego što je fizički moguće, što se naziva thrashing. Ako se ne zaustavi na vrijeme, thrashing vrlo brzo server izbacuje iz kontrole i vodi prema rušenju sustava.

Ako thrashing potraje predugo, može čak fizički oštetiti disk simulirajući godine intenzivnog čitanja i pisanja u vrlo kratkom razdoblju. Zato pri optimizaciji Apachea moramo paziti da ne kreiramo takav scenarij. To možemo izbjeći izračunom thrashing pointa servera na temelju nekoliko faktora.

Procjena thrashing pointa

Procjena thrashing pointa odnosno ServerLimit vrijednosti koristi jednostavnu jednadžbu:

( buff/cache - Reserved ) / Avg.Apache

  • buff/cache: ukupna količina memorije koju kernel koristi za buffere i cache
  • Reserved: količina memorije rezervirana za procese koji nisu Apache
  • Available: razlika između buff/cache i Reserved
  • Avg.Apache: prosječna memorijska potrošnja svih aktivnih Apache child procesa tijekom peak opterećenja

Thrashing point treba računati tijekom vršnih sati i povremeno ga ponovno procjenjivati radi optimalnih performansi.

Dobivena vrijednost predstavlja broj Apache child procesa koje server može držati u radu. To vrijedi i za threaded i za non-threaded modele. Kada broj child procesa u memoriji dosegne taj prag, server počinje gubiti stabilnost.

Buff/cache memorija

Na modernim Linux sustavima buff/cache može se izračunati iz /proc/meminfo datoteke zbrajanjem Buffers, Cached i Slab statistika. Pomoću free naredbe te podatke možete brzo dohvatiti:

free

Nemojte se zabuniti oko stupca available; ovdje nas zanima upravo memorija koju možemo prenamijeniti, a to je buff/cache.

Reserved memory

Reserved memory je dio memorije namijenjen drugim servisima osim Apachea. Najveći potrošači izvan Apachea često su MySQL, Tomcat, Memcache, Varnish i Nginx. Potrebno je pogledati njihove konfiguracije kako biste odredili koliko memorije treba rezervirati.

Kao pravilo, sačuvajte oko 25% ukupnog buff/cache iznosa za ostale servise na serveru.

Primjeri:

  • standardni cPanel server s više servisa uz Apache i MySQL često treba i do 25% rezervirane memorije
  • čisti Apache web node u load-balanced okruženju možda ne treba gotovo ništa dodatno rezervirati

Average Apache memory

Prosječnu veličinu Apache procesa relativno je jednostavno odrediti pomoću ps naredbe koja ispisuje RSS veličinu svih aktivnih httpd procesa. Na nekim distribucijama naziv procesa može biti apache umjesto httpd.

Ovaj primjer koristi kratki awk kako bi odmah izračunao prosjek:

ps o rss= -C httpd|awk '{n+=$1}END{print n/NR}'

Ako želite ručno pregledati veličine procesa, možete koristiti i:

ps o rss -C httpd

Izračun thrashing pointa

Kada prikupite podatke, podijelite Available memoriju s Avg.Apache i rezultat zaokružite prema dolje na cijeli broj. Available memorija jednaka je buff/cache minus Reserved.

Sažetak procesa izgleda ovako:

{{<table “table”>}}

VarijablaKBNapomena
buffer/cache808435Dobiveno naredbom free
Reserved202108Pravilo je do 25% buffer/cache memorije
Available606327buffer/cache minus Reserved
Avg Apache24500Dobiveno pomoću ps naredbe
Thrashing point24Available podijeljeno s Avg Apache
{{
}}

To je pojednostavljen pregled kako doći do svake varijable potrebne za procjenu thrashing pointa.

Ispod su i konzervativne procjene za različite memorijske konfiguracije. Mogu poslužiti kao polazišna točka, ali ih treba potvrditi promatranjem stvarnih performansi tijekom vršnih sati.

{{<table “table”>}}

MemorijaZahtjevi
0.5 GB4
1 GB10
2 GB23
4 GB46
6 GB70
8 GB93
12 GB140
16 GB187
24 GB281
32 GB374
{{
}}

Određivanje dobre optimization točke za Apache može spasiti server od downtimea, izgubljene prodaje i odlaska klijenata. Pametno upravljanje resursima ključno je kako bi servis ostao dostupan i brz.

Povezane usluge

Ove su usluge usklađene s temom članka i daju čišći prijelaz od edukativnog sadržaja do konkretne implementacije.

Nastavite čitati

Prvo po zajedničkim kategorijama, a zatim po najjačem preklapanju u tagovima.