Hukommelsen er den ressource, der oftest bestemmer en servers størrelse: det er den, der slipper op først, og når den slipper op, bliver serveren ikke bare langsommere, den stopper tjenester. Denne guide giver dig beregningsreglen, hvad hver komponent i en applikation bruger, typiske profiler og måden at måle på en server, der allerede kører.
available i free -h, ikke kolonnen free.En server bruger ikke hukommelse «generelt»: hvert program, der kører, beholder en del af den, så længe det kører. Beregningen tager derfor udgangspunkt i listen over de processer, der kører permanent, og lægger derefter spidsbelastningen og en margin til:
Hukommelsesbehov = (system + permanente tjenester + spidsbelastning fra enkeltstående opgaver) × 1,25
Størrelsesordenerne herunder gælder for en applikation af almindelig størrelse, målt i produktion. De giver et udgangspunkt; målingen på din egen applikation, som beskrives længere nede, har altid det sidste ord.
| Komponent | Typisk hukommelse | Det, der får den til at variere |
|---|---|---|
| Nginx, Caddy (webserver, proxy) | 10 til 50 MB | Næsten fast: antallet af forbindelser betyder lidt. |
| PHP-FPM (WordPress, Laravel, Symfony) | 40 til 80 MB pr. proces | Antallet af processer, begrænset af pm.max_children: 10 processer giver 400 til 800 MB. |
| Node.js (API, Next.js, NestJS) | 60 til 300 MB pr. proces | Antallet af processer (cluster-tilstand, PM2) og heapens størrelse, begrænset af --max-old-space-size. |
| Python (Django, FastAPI, Flask) | 80 til 200 MB pr. proces | Antallet af Gunicorn- eller Uvicorn-workers og de indlæste biblioteker: pandas eller en maskinlæringsmodel lægger flere hundrede MB oveni. |
| Java (Spring Boot) | 300 MB til 1 GB pr. applikation | Heapens maksimale størrelse: som standard giver JVM'en sig selv en fjerdedel af den hukommelse, den ser. |
| Go, Rust | 10 til 100 MB | De data, applikationen selv holder i hukommelsen. |
| PostgreSQL | 25 % af hukommelsen til shared_buffers, plus nogle MB pr. forbindelse | Mængden af data, der ofte læses, antallet af forbindelser, work_mem. |
| MySQL, MariaDB | innodb_buffer_pool_size, 128 MB som standard | På en server, der er dedikeret til databasen, optager denne buffer ofte op til 80 % af hukommelsen. |
| Redis | Datamængden plus dens strukturer | Under en lagring på disk bliver de ændrede sider duplikeret: op til det dobbelte i værste fald. |
| Elasticsearch, OpenSearch | Mindst 2 GB til heapen | Heapen overstiger ikke halvdelen af hukommelsen: resten bruges til filcachen. |
En spidsbelastning går ofte igen med JavaScript-applikationer: kompileringen. npm run build på et Next.js-, Nuxt- eller Angular-projekt kræver ofte 1 til 2 GB alene, i nogle minutter, oven i det, der allerede kører. At kompilere på serveren betyder at dimensionere efter den spidsbelastning; at kompilere på din egen computer eller i din CI-pipeline og kun lægge resultatet op undgår den.
Samme logik gælder for Docker-containere: hver container er en samling processer som alle andre, og Docker-dæmonen lægger sit eget forbrug til. docker stats viser, hvad hver enkelt bruger.
Disse profiler lægger komponenterne ovenfor sammen, spidsbelastning og margin medregnet. De forudsætter en applikation af almindelig størrelse og trafikken ved en lancering; en stor database eller vedvarende trafik flytter behovet opad.
| Det, der kører på serveren | Hukommelsesbehov |
|---|---|
| Statisk hjemmeside, proxy, lille bot eller planlagt script | 1 til 2 GB |
| En WordPress-hjemmeside med MariaDB og en sidecache | 2 GB |
| En WooCommerce-webshop eller flere WordPress-hjemmesider | 4 GB |
| Et Node.js- eller Python-API med PostgreSQL, de første brugere | 4 GB |
| En Next.js-applikation kompileret på serveren, dens API og dens PostgreSQL-database | 6 til 8 GB |
| Flere applikationer i containere, staging og produktion | 8 GB |
| En database på adskillige titals GB, der bruges intensivt | 16 GB og mere |
| En sprogmodel med 7 til 8 milliarder parametre, der kører på serveren | 16 GB |
En applikation, der kalder en AI-model via API (OpenAI, Anthropic, Mistral), dimensioneres som enhver anden webapplikation: modellen kører hos udbyderen, og din server venter på svaret. Det er, når modellen kører på selve serveren, at skalaen ændrer sig.
På en server i drift erstatter målingen skønnet. Tre kommandoer viser, hvor du står:
free -h
ps aux --sort=-rss | head -n 15
vmstat 5 5
free -h: læs kolonnen available, den hukommelse, der reelt er til rådighed til at starte nye programmer. Kolonnen free er næsten altid lav, og det er normalt: Linux fylder den ubrugte hukommelse med filcache (buff/cache), som den giver tilbage, så snart et program har brug for den.ps aux --sort=-rss: processerne sorteret efter optaget hukommelse (kolonnen RSS, i kilobyte). Det er her, du ser, hvad hver PHP- eller Node.js-worker vejer.vmstat 5 5: fem målinger med fem sekunders mellemrum. Værdier over nul i kolonnerne si og so, måling efter måling, viser en server, der bytter med swap: den mangler hukommelse.Mål på dagens travleste tidspunkt og under de enkeltstående opgaver: kompilering, backup, import. Det er spidsbelastningen, der tæller.
En server, der mangler hukommelse, bliver ikke gradvist langsommere. Når der ikke er mere at frigøre, udløser Linux-kernen OOM killer (out of memory): den vælger en proces, som regel den, der optager mest hukommelse, og stopper den brat. På en applikationsserver er det ofte databasen.
Symptomerne: 502- eller 503-fejl en gang imellem, en tjeneste, der genstarter uden synlig grund, en kompilering, der afbrydes med Killed. Logfilerne bekræfter det:
journalctl -k | grep -i "out of memory"
systemctl status din-tjeneste
I outputtet fra systemctl status betyder Failed with result 'oom-kill', at en tjeneste er stoppet på grund af manglende hukommelse.
Swap, hvis serveren har det, udskyder det øjeblik ved at flytte den mindst brugte hukommelse ud på disken. Det er et sikkerhedsnet, ikke kapacitet: en server, der konstant læner sig op ad swap, svarer flere gange langsommere, selv på en NVMe-SSD.
Løsningerne, fra den enkleste til den mest holdbare: sænk antallet af applikationsprocesser (pm.max_children, Gunicorn-workers), kompilér uden for serveren, begræns databasens hukommelse, og skift derefter til en større størrelse.
Hukommelsen er ikke den eneste ressource: processoren tæller for det, der regner (kompilering, billedbehandling, kørsel af en AI-model), disken for databasen og filerne. For en webapplikation er det alligevel næsten altid hukommelsen, der bestemmer størrelsen.
VPS Pro fås i seks størrelser, på Intel Xeon-processorer, ECC-hukommelse og spejlede NVMe-SSD'er, og skifter til en større størrelse når som helst, uden geninstallation. Totalsupport er inkluderet: fortæl os, hvad din server skal køre, så anbefaler vi størrelsen, og ved hvert spørgsmål stiller vi diagnosen og fortæller dig, hvad du skal gøre, fra systemet til din applikations kode.
En statisk hjemmeside, en proxy eller et lille script kører fint på 1 til 2 GB. Så snart en database og en applikation (PHP, Node.js, Python) deler serveren, skal du regne med 2 GB til en WordPress-hjemmeside og 4 GB til en skræddersyet applikation med PostgreSQL.
2 GB til en hjemmeside med MariaDB og en sidecache, 4 GB til en WooCommerce-webshop eller flere hjemmesider. Antallet af PHP-FPM-processer er den første indstilling: hver af dem optager 40 til 80 MB.
Nej. Swap forhindrer et brat stop, når hukommelsen er fuld, men en server, der bruger det konstant, svarer flere gange langsommere, selv på en NVMe-SSD. Det er et sikkerhedsnet; størrelsen vælges efter hukommelsen.
Fordi Linux bruger den ubrugte hukommelse som filcache. Cachen frigives, så snart et program har brug for hukommelse. Kolonnen, du skal læse, er available, som viser den hukommelse, der reelt er til rådighed.
Regn med 1 til 2 GB til selve kompileringen, oven i det, der allerede kører på serveren. At kompilere på din egen computer eller i din CI-pipeline og kun lægge resultatet op undgår den spidsbelastning.
Simafri
Lad os tale om din hjemmeside
Fortæl os om dit projekt med få ord: vi vender hurtigt tilbage til dig.
Tak! Din forespørgsel er sendt. Vi vender tilbage til dig hurtigst muligt.
Foretrækker du e-mail? Skriv til os på support@simafri.com.