Pomnilnik je vir, ki najpogosteje določi velikost strežnika: zmanjka ga prvega, in ko ga zmanjka, se strežnik ne upočasni, temveč ustavlja storitve. Ta vodnik poda pravilo izračuna, porabo vsakega gradnika aplikacije, značilne profile in način merjenja na strežniku, ki že teče.
available ukaza free -h, ne stolpca free.Strežnik ne porablja pomnilnika „na splošno“: vsak program, ki teče, zase zadrži del pomnilnika, dokler teče. Izračun se zato začne s seznamom procesov, ki so stalno prisotni, nato pa doda konico in rezervo:
Potreben pomnilnik = (sistem + stalne storitve + konica občasnih opravil) × 1,25
Spodnji redi velikosti veljajo za aplikacijo običajne velikosti, izmerjeno v produkciji. So izhodišče; zadnjo besedo ima vedno meritev na vaši lastni aplikaciji, opisana v nadaljevanju.
| Gradnik | Običajna poraba pomnilnika | Od česa je odvisna |
|---|---|---|
| Nginx, Caddy (spletni strežnik, proxy) | 10 do 50 MB | Skoraj stalna: število povezav malo vpliva. |
| PHP-FPM (WordPress, Laravel, Symfony) | 40 do 80 MB na proces | Število procesov, omejeno s pm.max_children: 10 procesov pomeni od 400 do 800 MB. |
| Node.js (API, Next.js, NestJS) | 60 do 300 MB na proces | Število procesov (način cluster, PM2) in velikost kopice, omejena z --max-old-space-size. |
| Python (Django, FastAPI, Flask) | 80 do 200 MB na proces | Število delovnih procesov Gunicorn ali Uvicorn in naložene knjižnice: pandas ali model strojnega učenja dodata več sto MB. |
| Java (Spring Boot) | 300 MB do 1 GB na aplikacijo | Največja velikost kopice: JVM si privzeto dodeli četrtino pomnilnika, ki ga vidi. |
| Go, Rust | 10 do 100 MB | Podatki, ki jih aplikacija sama hrani v pomnilniku. |
| PostgreSQL | 25 % pomnilnika za shared_buffers, plus nekaj MB na povezavo | Obseg pogosto branih podatkov, število povezav, work_mem. |
| MySQL, MariaDB | innodb_buffer_pool_size, privzeto 128 MB | Na strežniku, namenjenem samo podatkovni zbirki, ta medpomnilnik pogosto zasede do 80 % pomnilnika. |
| Redis | Velikost podatkov, plus njegove podatkovne strukture | Med shranjevanjem na disk se spremenjene strani podvojijo: v najslabšem primeru do dvojne porabe. |
| Elasticsearch, OpenSearch | Vsaj 2 GB za kopico | Kopica ostane pod polovico pomnilnika: preostanek služi predpomnilniku datotek. |
Pri aplikacijah v JavaScriptu se pogosto ponovi ena konica: prevajanje (build). npm run build na projektu Next.js, Nuxt ali Angular samo zase pogosto zahteva od 1 do 2 GB, za nekaj minut, poleg vsega, kar že teče. Prevajati na strežniku pomeni dimenzionirati za to konico; prevajati na svojem računalniku ali v sistemu za stalno integracijo in na strežnik naložiti samo rezultat pomeni, da se ji izognete.
Enak razmislek velja za vsebnike Docker: vsak vsebnik je skupina procesov kot vsi drugi, demon Docker pa doda svojo porabo. docker stats prikaže, koliko zasede vsak.
Ti profili seštejejo zgornje gradnike, vključno s konico in rezervo. Predpostavljajo aplikacijo običajne velikosti in promet ob zagonu; obsežna podatkovna zbirka ali stalen promet številko premakneta navzgor.
| Kaj teče na strežniku | Potreben pomnilnik |
|---|---|
| Statična spletna stran, proxy, manjši bot ali načrtovan skript | 1 do 2 GB |
| Ena spletna stran WordPress z MariaDB in predpomnilnikom strani | 2 GB |
| Spletna trgovina WooCommerce ali več spletnih strani WordPress | 4 GB |
| API v Node.js ali Pythonu s PostgreSQL, prvi uporabniki | 4 GB |
| Aplikacija Next.js, prevedena na strežniku, njen API in podatkovna zbirka PostgreSQL | 6 do 8 GB |
| Več aplikacij v vsebnikih, predprodukcija in produkcija | 8 GB |
| Podatkovna zbirka z več deset GB, ki se intenzivno bere | 16 GB in več |
| Jezikovni model s 7 do 8 milijardami parametrov, ki teče na strežniku | 16 GB |
Aplikacija, ki model umetne inteligence kliče prek API-ja (OpenAI, Anthropic, Mistral), se dimenzionira kot vsaka spletna aplikacija: model teče pri svojem ponudniku, vaš strežnik pa čaka na odgovor. Merilo spremeni šele izvajanje modela na samem strežniku.
Na strežniku v produkciji meritev nadomesti oceno. Trije ukazi povedo, kje ste:
free -h
ps aux --sort=-rss | head -n 15
vmstat 5 5
free -h: preberite stolpec available, pomnilnik, ki je dejansko na voljo za zagon novih programov. Stolpec free je skoraj vedno nizek, in to je normalno: Linux neuporabljeni pomnilnik zapolni s predpomnilnikom datotek (buff/cache), ki ga sprosti, takoj ko ga program potrebuje.ps aux --sort=-rss: procesi, razvrščeni po zasedenem pomnilniku (stolpec RSS, v kilobajtih). Tu vidite, koliko tehta vsak delovni proces PHP ali Node.js.vmstat 5 5: pet meritev v razmiku petih sekund. Neničelne vrednosti v stolpcih si in so, meritev za meritvijo, kažejo na strežnik, ki izmenjuje podatke s swapom: pomnilnika mu primanjkuje.Merite v najbolj obremenjenem delu dneva in med občasnimi opravili: prevajanje, varnostno kopiranje, uvoz. Šteje konica.
Strežnik, ki mu zmanjka pomnilnika, se ne upočasnjuje postopoma. Ko ni več ničesar, kar bi lahko sprostil, jedro Linuxa sproži OOM killer (out of memory): izbere proces, praviloma tisti, ki zaseda največ pomnilnika, in ga v trenutku ustavi. Na aplikacijskem strežniku je to pogosto podatkovna zbirka.
Simptomi: občasne napake 502 ali 503, storitev, ki se brez vidnega razloga znova zažene, prevajanje, ki se prekine z izpisom Killed. Dnevniki to potrdijo:
journalctl -k | grep -i "out of memory"
systemctl status ime-storitve
V izpisu ukaza systemctl status navedba Failed with result 'oom-kill' označuje storitev, ustavljeno zaradi pomanjkanja pomnilnika.
Swap, kadar ga strežnik ima, ta trenutek odloži, tako da najmanj uporabljeni pomnilnik premakne na disk. Je varnostna mreža, ne zmogljivost: strežnik, ki se nenehno opira na swap, odgovarja nekajkrat počasneje, tudi na NVMe SSD.
Rešitve, od najpreprostejše do najtrajnejše: zmanjšajte število procesov aplikacije (pm.max_children, delovni procesi Gunicorn), prevajajte zunaj strežnika, omejite pomnilnik podatkovne zbirke, nato preidite na večjo velikost.
Pomnilnik ni edini vir: procesor šteje za vse, kar računa (prevajanje, obdelava slik, izvajanje modela umetne inteligence), disk pa za podatkovno zbirko in datoteke. Pri spletni aplikaciji pa velikost skoraj vedno določi prav pomnilnik.
VPS Pro je na voljo v šestih velikostih, na procesorjih Intel Xeon, pomnilniku ECC in zrcaljenih NVMe SSD, na večjo velikost pa preide kadar koli, brez ponovne namestitve. Celovita podpora je vključena: opišite nam, kaj bo poganjal vaš strežnik, svetujemo vam velikost, nato pa ob vsakem vprašanju postavimo diagnozo in vam povemo, kaj storiti, od sistema do kode vaše aplikacije.
Statična spletna stran, proxy ali manjši skript tečejo v 1 do 2 GB. Ko si strežnik delita podatkovna zbirka in aplikacija (PHP, Node.js, Python), računajte 2 GB za spletno stran WordPress in 4 GB za aplikacijo po meri s PostgreSQL.
2 GB za spletno stran z MariaDB in predpomnilnikom strani, 4 GB za trgovino WooCommerce ali več spletnih strani. Število procesov PHP-FPM je prva nastavitev: vsak zasede od 40 do 80 MB.
Ne. Swap prepreči nenadno ustavitev, ko je pomnilnik poln, vendar strežnik, ki ga nenehno uporablja, odgovarja nekajkrat počasneje, tudi na NVMe SSD. Je varnostna mreža; velikost se izbira po pomnilniku.
Ker Linux neuporabljeni pomnilnik uporablja kot predpomnilnik datotek. Ta predpomnilnik se sprosti, takoj ko program potrebuje pomnilnik. Stolpec, ki ga preberete, je available, ki kaže dejansko razpoložljivi pomnilnik.
Računajte od 1 do 2 GB samo za prevajanje, poleg tega, kar že teče na strežniku. Prevajanje na vašem računalniku ali v sistemu za stalno integracijo, z nalaganjem samo rezultata, se tej konici izogne.
Simafri
Pogovorimo se o vašem projektu
Povejte nam v nekaj besedah, kaj potrebujete: hitro se vam oglasimo.
Hvala! Vaše povpraševanje je bilo poslano. Kmalu vam bomo odgovorili.
Imate raje e-pošto? Pišite nam na support@simafri.com.