Memorija je resurs koji najčešće određuje veličinu poslužitelja: ona prva ponestane, a kada ponestane, poslužitelj ne usporava, nego zaustavlja usluge. Ovaj vodič daje pravilo izračuna, potrošnju svakog dijela aplikacije, tipične profile i način mjerenja na poslužitelju koji već radi.
available naredbe free -h, a ne stupac free.Poslužitelj ne troši memoriju „općenito”: svaki program koji radi zadržava njezin dio sve dok radi. Izračun zato polazi od popisa procesa koji su stalno prisutni, a zatim dodaje vršno opterećenje i rezervu:
Potrebna memorija = (sustav + stalne usluge + vrh povremenih zadataka) × 1,25
Donje vrijednosti vrijede za aplikaciju uobičajene veličine, izmjerenu u produkciji. One su polazna točka; mjerenje na vašoj vlastitoj aplikaciji, opisano niže, uvijek ima posljednju riječ.
| Dio | Tipična memorija | O čemu ovisi |
|---|---|---|
| Nginx, Caddy (web poslužitelj, proxy) | 10 do 50 MB | Gotovo stalna: broj veza malo utječe. |
| PHP-FPM (WordPress, Laravel, Symfony) | 40 do 80 MB po procesu | Broj procesa, ograničen parametrom pm.max_children: 10 procesa, 400 do 800 MB. |
| Node.js (API, Next.js, NestJS) | 60 do 300 MB po procesu | Broj procesa (način rada cluster, PM2) i veličina heapa, ograničena opcijom --max-old-space-size. |
| Python (Django, FastAPI, Flask) | 80 do 200 MB po procesu | Broj Gunicorn ili Uvicorn workera i učitane biblioteke: pandas ili model strojnog učenja dodaju stotine MB. |
| Java (Spring Boot) | 300 MB do 1 GB po aplikaciji | Najveća veličina heapa: JVM si prema zadanim postavkama dodjeljuje četvrtinu memorije koju vidi. |
| Go, Rust | 10 do 100 MB | Podaci koje aplikacija sama drži u memoriji. |
| PostgreSQL | 25 % memorije za shared_buffers, plus nekoliko MB po vezi | Količina često čitanih podataka, broj veza, work_mem. |
| MySQL, MariaDB | innodb_buffer_pool_size, 128 MB prema zadanim postavkama | Na poslužitelju namijenjenom samo bazi taj međuspremnik često zauzima do 80 % memorije. |
| Redis | Veličina podataka, plus njegove strukture | Tijekom spremanja na disk izmijenjene stranice se udvostručuju: u najgorem slučaju do dvostruke količine. |
| Elasticsearch, OpenSearch | Najmanje 2 GB za heap | Heap ne prelazi polovicu memorije: ostatak služi kao predmemorija datoteka. |
Jedan se vrh često ponavlja kod JavaScript aplikacija: kompilacija (build). npm run build na projektu Next.js, Nuxt ili Angular sam za sebe često traži 1 do 2 GB, tijekom nekoliko minuta, povrh onoga što već radi. Kompilirati na poslužitelju znači dimenzionirati za taj vrh; kompilirati na svojem računalu ili u kontinuiranoj integraciji (CI) i na poslužitelj postaviti samo rezultat znači izbjeći ga.
Isto razmišljanje vrijedi za Docker kontejnere: svaki je kontejner skup procesa kao i svaki drugi, a Docker daemon dodaje vlastitu potrošnju. docker stats prikazuje koliko zauzima svaki od njih.
Ovi profili zbrajaju prethodne dijelove, uključujući vršno opterećenje i rezervu. Pretpostavljaju aplikaciju uobičajene veličine i promet kakav je pri pokretanju; velika baza ili stalno visok promet pomiču procjenu naviše.
| Što radi na poslužitelju | Potrebna memorija |
|---|---|
| Statična stranica, proxy, mali bot ili zakazana skripta | 1 do 2 GB |
| Jedna WordPress stranica s MariaDB-om i predmemorijom stranica | 2 GB |
| WooCommerce trgovina ili više WordPress stranica | 4 GB |
| Node.js ili Python API s PostgreSQL-om, prvi korisnici | 4 GB |
| Next.js aplikacija kompilirana na poslužitelju, njezin API i PostgreSQL baza | 6 do 8 GB |
| Više aplikacija u kontejnerima, testno i produkcijsko okruženje | 8 GB |
| Baza podataka od nekoliko desetaka GB, s intenzivnim čitanjem | 16 GB i više |
| Jezični model od 7 do 8 milijardi parametara koji radi na poslužitelju | 16 GB |
Aplikacija koja poziva AI model putem API-ja (OpenAI, Anthropic, Mistral) dimenzionira se kao bilo koja web aplikacija: model radi kod svojeg izdavača, a vaš poslužitelj čeka odgovor. Tek izvođenje modela na samom poslužitelju mijenja razmjere.
Na poslužitelju u radu mjerenje zamjenjuje procjenu. Tri naredbe pokazuju gdje ste:
free -h
ps aux --sort=-rss | head -n 15
vmstat 5 5
free -h: čitajte stupac available, memoriju koja je stvarno dostupna za pokretanje novih programa. Stupac free gotovo je uvijek nizak, i to je normalno: Linux neiskorištenu memoriju puni predmemorijom datoteka (buff/cache), koju vraća čim je nekom programu potrebna.ps aux --sort=-rss: procesi poredani prema zauzetoj memoriji (stupac RSS, u kilobajtima). Ovdje se vidi koliko teži svaki PHP ili Node.js worker.vmstat 5 5: pet očitanja u razmaku od pet sekundi. Vrijednosti različite od nule u stupcima si i so, očitanje za očitanjem, znače da poslužitelj razmjenjuje podatke sa swapom: nedostaje mu memorije.Mjerite u najopterećenijem dijelu dana i tijekom povremenih zadataka: kompilacije, sigurnosne kopije, uvoza. Važan je vrh.
Poslužitelj kojemu ponestaje memorije ne usporava postupno. Kada više nema ničega što bi se moglo osloboditi, jezgra Linuxa pokreće OOM killer (out of memory): odabire proces, obično onaj koji zauzima najviše memorije, i naglo ga zaustavlja. Na aplikacijskom poslužitelju to je često baza podataka.
Simptomi: povremene pogreške 502 ili 503, usluga koja se ponovno pokreće bez vidljivog razloga, kompilacija koja se prekida porukom Killed. Zapisi to potvrđuju:
journalctl -k | grep -i "out of memory"
systemctl status naziv-usluge
U ispisu naredbe systemctl status oznaka Failed with result 'oom-kill' označava uslugu zaustavljenu zbog nedostatka memorije.
Swap, ako ga poslužitelj ima, odgađa taj trenutak premještanjem najmanje korištene memorije na disk. On je sigurnosna mreža, a ne kapacitet: poslužitelj koji se neprestano oslanja na swap odgovara nekoliko puta sporije, čak i na NVMe SSD-u.
Rješenja, od najjednostavnijeg do najtrajnijeg: smanjiti broj procesa aplikacije (pm.max_children, Gunicorn workeri), kompilirati izvan poslužitelja, ograničiti memoriju baze podataka, a zatim prijeći na veću veličinu.
Memorija nije jedini resurs: procesor je važan za sve što računa (kompilacija, obrada slika, izvođenje AI modela), a disk za bazu podataka i datoteke. Za web aplikaciju ipak gotovo uvijek memorija određuje veličinu.
VPS Pro dostupan je u šest veličina, na procesorima Intel Xeon, ECC memoriji i zrcaljenim NVMe SSD-ovima, a na veću veličinu prelazi u svakom trenutku, bez ponovne instalacije. Cjelovita podrška je uključena: opišite nam što će vaš poslužitelj pokretati i savjetovat ćemo vam veličinu, a zatim za svako pitanje postavljamo dijagnozu i kažemo vam što učiniti, od sustava do koda vaše aplikacije.
Statična stranica, proxy ili mala skripta rade s 1 do 2 GB. Čim baza podataka i aplikacija (PHP, Node.js, Python) dijele poslužitelj, računajte s 2 GB za WordPress stranicu i 4 GB za aplikaciju po mjeri s PostgreSQL-om.
2 GB za stranicu s MariaDB-om i predmemorijom stranica, 4 GB za WooCommerce trgovinu ili više stranica. Broj PHP-FPM procesa prva je postavka: svaki zauzima 40 do 80 MB.
Ne. Swap sprječava nagli prekid kada je memorija puna, ali poslužitelj koji ga stalno koristi odgovara nekoliko puta sporije, čak i na NVMe SSD-u. On je sigurnosna mreža; veličina se bira prema memoriji.
Zato što Linux neiskorištenu memoriju koristi kao predmemoriju datoteka. Ta se predmemorija oslobađa čim nekom programu zatreba memorija. Treba čitati stupac available, koji pokazuje stvarno dostupnu memoriju.
Računajte s 1 do 2 GB samo za kompilaciju, povrh onoga što već radi na poslužitelju. Kompilacija na vašem računalu ili u kontinuiranoj integraciji, uz postavljanje samo rezultata na poslužitelj, izbjegava taj vrh.
Simafri
Porazgovarajmo o Vašem projektu
Recite nam u nekoliko riječi što trebate: javljamo Vam se brzo.
Hvala! Vaš upit je poslan. Javit ćemo vam se uskoro.
Više volite e-mail? Pišite nam na support@simafri.com.