Geheugen bepaalt het vaakst hoe groot een server moet zijn: het raakt als eerste op, en als het opraakt, wordt de server niet gewoon trager, maar legt hij diensten stil. Deze gids geeft de rekenregel, wat elk onderdeel van een applicatie verbruikt, typische profielen en de manier om te meten op een server die al draait.
available van free -h, niet de kolom free.Een server verbruikt geen geheugen “in het algemeen”: elk programma dat draait, houdt er een deel van vast, zolang het draait. De berekening begint dus bij de lijst van processen die permanent aanwezig zijn, en telt daar de piek en een marge bij op:
Benodigd geheugen = (systeem + permanente diensten + piek van incidentele taken) × 1,25
De ordes van grootte hieronder gelden voor een applicatie van gangbare omvang, gemeten in productie. Ze geven een vertrekpunt; de meting op uw eigen applicatie, verderop beschreven, heeft altijd het laatste woord.
| Onderdeel | Typisch geheugen | Waardoor het varieert |
|---|---|---|
| Nginx, Caddy (webserver, proxy) | 10 tot 50 MB | Vrijwel vast: het aantal verbindingen weegt weinig. |
| PHP-FPM (WordPress, Laravel, Symfony) | 40 tot 80 MB per proces | Het aantal processen, begrensd door pm.max_children: 10 processen, 400 tot 800 MB. |
| Node.js (API, Next.js, NestJS) | 60 tot 300 MB per proces | Het aantal processen (clustermodus, PM2) en de grootte van de heap, begrensd door --max-old-space-size. |
| Python (Django, FastAPI, Flask) | 80 tot 200 MB per proces | Het aantal Gunicorn- of Uvicorn-workers, en de geladen bibliotheken: pandas of een machinelearningmodel voegen honderden MB toe. |
| Java (Spring Boot) | 300 MB tot 1 GB per applicatie | De maximale grootte van de heap: standaard neemt de JVM een kwart van het geheugen dat ze ziet. |
| Go, Rust | 10 tot 100 MB | De gegevens die de applicatie zelf in het geheugen houdt. |
| PostgreSQL | 25% van het geheugen voor shared_buffers, plus enkele MB per verbinding | Het volume gegevens dat vaak wordt geraadpleegd, het aantal verbindingen, work_mem. |
| MySQL, MariaDB | innodb_buffer_pool_size, standaard 128 MB | Op een server die alleen voor de database dient, neemt deze buffer gewoonlijk tot 80% van het geheugen in. |
| Redis | De omvang van de gegevens, plus de datastructuren | Tijdens het wegschrijven naar schijf worden gewijzigde pagina’s gedupliceerd: in het slechtste geval tot het dubbele. |
| Elasticsearch, OpenSearch | Minstens 2 GB voor de heap | De heap blijft onder de helft van het geheugen: de rest dient als bestandscache. |
Eén piek duikt bij JavaScript-applicaties telkens weer op: de build. npm run build op een Next.js-, Nuxt- of Angular-project vraagt alleen al gewoonlijk 1 tot 2 GB, een paar minuten lang, bovenop wat er al draait. Op de server bouwen betekent dimensioneren voor die piek; bouwen op uw eigen computer of in uw CI-pipeline en alleen het resultaat uitrollen, vermijdt hem.
Dezelfde redenering geldt voor Docker-containers: elke container is een verzameling processen zoals alle andere, en de Docker-daemon voegt zijn eigen verbruik toe. docker stats toont wat elke container inneemt.
Deze profielen tellen de onderdelen hierboven op, piek en marge inbegrepen. Ze gaan uit van een applicatie van gangbare omvang en het verkeer van een lancering; een omvangrijke database of aanhoudend verkeer schuift de wijzer naar boven.
| Wat er op de server draait | Benodigd geheugen |
|---|---|
| Statische website, proxy, kleine bot of gepland script | 1 tot 2 GB |
| Eén WordPress-website met MariaDB en een paginacache | 2 GB |
| Een WooCommerce-webwinkel, of meerdere WordPress-websites | 4 GB |
| Een Node.js- of Python-API met PostgreSQL, eerste gebruikers | 4 GB |
| Een Next.js-applicatie die op de server wordt gebouwd, met haar API en haar PostgreSQL-database | 6 tot 8 GB |
| Meerdere applicaties in containers, staging en productie | 8 GB |
| Een database van enkele tientallen GB, intensief geraadpleegd | 16 GB en meer |
| Een taalmodel van 7 tot 8 miljard parameters dat op de server draait | 16 GB |
Een applicatie die een AI-model via een API aanroept (OpenAI, Anthropic, Mistral), dimensioneert u zoals elke webapplicatie: het model draait bij de aanbieder, en uw server wacht op het antwoord. Het is het draaien van het model op de server zelf dat de schaal verandert.
Op een server in productie vervangt de meting de schatting. Drie commando’s vertellen waar u staat:
free -h
ps aux --sort=-rss | head -n 15
vmstat 5 5
free -h: lees de kolom available, het geheugen dat werkelijk beschikbaar is om nieuwe programma’s te starten. De kolom free is bijna altijd laag, en dat is normaal: Linux vult ongebruikt geheugen met bestandscache (buff/cache), die het teruggeeft zodra een programma er behoefte aan heeft.ps aux --sort=-rss: de processen gerangschikt naar ingenomen geheugen (kolom RSS, in kilobytes). Hier ziet u wat elke PHP- of Node.js-worker weegt.vmstat 5 5: vijf metingen met telkens vijf seconden ertussen. Waarden die niet nul zijn in de kolommen si en so, meting na meting, wijzen op een server die naar swap uitwijkt: hij komt geheugen tekort.Meet op het drukste moment van de dag, en tijdens de incidentele taken: build, back-up, import. De piek is wat telt.
Een server zonder geheugen wordt niet geleidelijk trager. Als er niets meer vrij te maken is, zet de Linux-kernel de OOM killer (out of memory) in: die kiest een proces, meestal het proces dat het meeste geheugen inneemt, en stopt het abrupt. Op een applicatieserver is dat vaak de database.
De symptomen: af en toe 502- of 503-fouten, een dienst die zonder zichtbare reden herstart, een build die afbreekt met Killed. De logs bevestigen het:
journalctl -k | grep -i "out of memory"
systemctl status naam-van-de-dienst
In de uitvoer van systemctl status wijst de vermelding Failed with result 'oom-kill' op een dienst die is gestopt door geheugentekort.
Swap, als de server die heeft, stelt dat moment uit door het minst gebruikte geheugen naar schijf te verplaatsen. Het is een vangnet, geen capaciteit: een server die voortdurend op swap leunt, reageert meerdere keren trager, zelfs op een NVMe-SSD.
De oplossingen, van eenvoudigst tot duurzaamst: het aantal processen van de applicatie verlagen (pm.max_children, Gunicorn-workers), buiten de server bouwen, het geheugen van de database begrenzen, en daarna overstappen naar een groter formaat.
Geheugen is niet de enige resource: de processor telt voor alles wat rekent (builds, beeldbewerking, het draaien van een AI-model), de schijf voor de database en de bestanden. Voor een webapplicatie is het toch bijna altijd het geheugen dat het formaat bepaalt.
VPS Pro is er in zes formaten, op Intel Xeon-processors, ECC-geheugen en gespiegelde NVMe-SSD’s, en stapt op elk moment over naar een groter formaat, zonder herinstallatie. Full-Stack Support is inbegrepen: beschrijf wat uw server zal draaien en wij adviseren u over het formaat; daarna stellen wij bij elke vraag de diagnose en vertellen u wat u moet doen, van het systeem tot de code van uw applicatie.
Een statische website, een proxy of een klein script draait in 1 tot 2 GB. Zodra een database en een applicatie (PHP, Node.js, Python) de server delen, rekent u op 2 GB voor een WordPress-website en 4 GB voor een maatwerkapplicatie met PostgreSQL.
2 GB voor een website met MariaDB en een paginacache, 4 GB voor een WooCommerce-webwinkel of meerdere websites. Het aantal PHP-FPM-processen is de eerste instelling om naar te kijken: elk proces neemt 40 tot 80 MB in.
Nee. Swap voorkomt een abrupte stop als het geheugen vol is, maar een server die er voortdurend op leunt, reageert meerdere keren trager, zelfs op een NVMe-SSD. Het is een vangnet; het formaat kiest u op basis van het geheugen.
Omdat Linux ongebruikt geheugen als bestandscache gebruikt. Die cache komt vrij zodra een programma geheugen nodig heeft. De kolom om te lezen is available, die het werkelijk beschikbare geheugen geeft.
Reken op 1 tot 2 GB voor de build alleen, bovenop wat er al op de server draait. Bouwen op uw eigen computer of in uw CI-pipeline en alleen het resultaat uitrollen, vermijdt die piek.
Simafri
Laten we het over uw website hebben
Vertel ons in een paar woorden over uw project: wij nemen snel contact met u op.
Bedankt! Uw aanvraag is verzonden. We nemen spoedig contact met u op.
Liever per e-mail? Schrijf ons op support@simafri.com.