Optimaliseer Linux voor uw beschikbare RAM

Het is soms moeilijk in te schatten wat precies de ideale geheugen-omvang is voor een VPS. Veel klanten zien we in de eerste paar weken nadat ze een VPS afnemen nog terugkomen op een eerste inschatting. Dit is een grote reden waarom we flexibel omgaan met upgrades en downgrades. Maar zelfs op een VPS die normaal gesproken prima prestaties levert kan het toeval treffen dat er net even meer gebruikers tegelijk langskomen dan normaal.

Juist omdat een VPS vaak wat scherper op de snede wordt ingekocht zien we dat er bij onverwachte drukte op VPSen eerder sprake is van echte overbelasting. Het is daarom zaak om, zeker als een VPS enigsinds op het randje zit, goed na te denken over de configuratie. Commerciele control panels komen vaak al met wat extra optimalisaties die uitgaan van een krappere hoeveelheid geheugen, maar als u zelf aan de slag bent is het goed om een beetje inzicht te krijgen in wat er mogelijk is. Hieronder volgen enkele tips om geheugen uitschieters te beperken.

Beperk het maximale aantal processen

Veel server-software op Unix-systemen maakt intensief gebruik van het ‘fork’-principe, waar voor iedere nieuwe gebruiker die verbinding maakt met de server een cloon geproduceerd wordt van het serverproces. De standaardinstellingen van programma’s als apache en spamassassin gaan vaak uit van veel grotere serveromgevingen. Stel in de configuratie van dit soort diensten daarom een veel lager aantal toegestane kind-processen toe.

Op een kleine VPS is een maximum aantal van 24 children helemaal geen onverstandige keuze. Op het moment dat de server dan op het maximum zit moeten nieuwe verbindingen even wachten tot een oudere verbinding wordt vrijgegeven. Dit voelt eng, maar de relatief kleine vertraging die in dit geval optreedt is niks vergeleken bij de hele VPS die intensief begint te swappen wegens gebrek aan geheugen.

In de apache httpd.conf is deze parameter te vinden in de sectie omrand met <IfModule prefork.c>, hij heet MaxClients.

Houd rekening met geheugenlekken

Sommige software heeft de neiging meer geheugen nodig te hebben naar mate het langer draait. Software die dit structureel vertoont zonder bekende remedie zou met regelmatig interval een herstart kunnen krijgen, alhoewel zoiets ook als bug beschouwd zou kunnen worden en het soms de moeite kan lonen om in contact te treden met de auteurs of leveranciers om te kijken of er wat aan gedaan kan worden.

Apache-processen hebben ook de neiging om te groeien onder het juk van mod_php. Om te voorkomen dat apache langzaam al het geheugen opeet kan het raadzaam zijn om in de eerdergenoemde sectie ook een waarde in te vullen bij MaxRequestsPerChild. Deze parameter bepaalt na hoeveel requests apache een kind-proces opnieuw moet starten. Door hier een wat lager getal (zeg, 256) in te vullen, kan voorkomen worden dat dit fenomeen uit de hand loopt. Een andere optie kan zijn om in plaats van mod_php een cgi-versie van php te gebruiken, misschien zelfs in combinatie met suphp.

Overweeg (x)inetd of tcpserver

Inetd is een hele oude manier om services op Unix te implementeren. Het idee erachter is dat, in plaats van de normale gang van zaken waar een serverproces de hele tijd op de achtergrond meedraait en op verbindingen wacht, een compacte ‘superserver’ wordt gestart die, op het moment dat iemand verbinding zoekt met een specifieke service, op dat moment het nodige programma opstart om het verzoek af te kunnen handelen.

Voor services waar het aantal nieuwe verbindingen per minuut op meer dan een hand geteld kan worden is deze oplossing onhandig, aangezien het on demand opstarten van een service wat extra overhead met zich meebrengt. Maar voor een dienst die minder vaak wordt geraadpleegd, zoals ftp, kan dit een prima alternatief zijn.

Wees niet te zuinig

Geheugen dat niet direct gebruikt wordt zal door de Linux-kernel worden ingezet als tijdelijk werkgeheugen (cache), wat toegang tot bestanden op schijf behoorlijk kan versnellen. Probeer daarom, als u bijvoorbeeld uw situatie analyseert vanuit N2, rekening te houden met voldoende vrije ruimte om minder afhankelijk te zijn van directe disktoegang, een voorzorgsmaatregel die zichzelf op piekmomenten meer dan terug zal verdienen.

  • Digg
  • StumbleUpon
  • Twitter
  • del.icio.us
  • Facebook
  • Hyves
  • Reddit

Tags: , , , , , , ,

2 Responses to “Optimaliseer Linux voor uw beschikbare RAM”

  1. Joost says:

    Ik heb m’n VPS ook flink weten te optimized met vergelijkbare tips. Uiteindelijk kreeg ik alles zelfs binnen 128MB goed draaiende.

    Belangrijkste optimalisaties waren het verkleinen van het aantal Apache processen die stonden te wachten, het uitschakelen van de exotische MySQL table engines en het verminderen van de MySQL query cache size. Mailman (Python-based) is veruit de grootste geheugenvreter, maar daar krijg ik weinig aan getweakt.

    Toen een site wat drukker werd toch maar besloten te upgraden naar 256MB en de perfomance is nu weer helemaal top!

  2. Maarten Kossen says:

    Interessant artikel. Een echte performance optimiser is LiteSpeed in plaats van Apache. LiteSpeed kost wel geld, echter kan het, zeker in een PHP omgeving of een SSL omgeving, erg veel geheugenwinst opleveren. Steeds emer grote hosting-partijen stappen over naar deze webserver.

    Volgende keer wel graag de linebreaks even weghalen, dat leest veel fijner.

Leave a Reply