Muisti on se resurssi, joka useimmiten ratkaisee palvelimen koon: se loppuu ensimmäisenä, ja kun se loppuu, palvelin ei hidastu vaan pysäyttää palveluja. Tämä opas antaa laskusäännön, kertoo, mitä sovelluksen kukin osa kuluttaa, esittelee tyypilliset profiilit ja näyttää, miten jo käynnissä olevan palvelimen muistinkäyttö mitataan.
free -h sarake available, ei saraketta free.Palvelin ei kuluta muistia ”yleisesti”: jokainen käynnissä oleva ohjelma varaa siitä osansa niin kauan kuin se on käynnissä. Laskelma lähtee siis jatkuvasti käynnissä olevien prosessien luettelosta, ja siihen lisätään huippu ja marginaali:
Tarvittava muisti = (järjestelmä + jatkuvat palvelut + satunnaisten tehtävien huippu) × 1,25
Alla olevat suuruusluokat pätevät tavallisen kokoiseen sovellukseen tuotannossa mitattuina. Ne ovat lähtökohta; oman sovelluksenne mittaus, jota kuvataan jäljempänä, ratkaisee aina lopullisesti.
| Osa | Tyypillinen muisti | Mikä sitä muuttaa |
|---|---|---|
| Nginx, Caddy (verkkopalvelin, välityspalvelin) | 10 ja 50 MB:n välillä | Lähes vakio: yhteyksien määrä vaikuttaa vähän. |
| PHP-FPM (WordPress, Laravel, Symfony) | 40 ja 80 MB:n välillä prosessia kohden | Prosessien määrä, jonka ylärajan asettaa pm.max_children: 10 prosessia vie 400 ja 800 MB:n välillä. |
| Node.js (API, Next.js, NestJS) | 60 ja 300 MB:n välillä prosessia kohden | Prosessien määrä (cluster-tila, PM2) ja keon koko, jonka ylärajan asettaa --max-old-space-size. |
| Python (Django, FastAPI, Flask) | 80 ja 200 MB:n välillä prosessia kohden | Gunicornin tai Uvicornin workereiden määrä ja ladatut kirjastot: pandas tai koneoppimismalli lisää satoja megatavuja. |
| Java (Spring Boot) | 300 MB:n ja 1 GB:n välillä sovellusta kohden | Keon enimmäiskoko: oletuksena JVM varaa itselleen neljänneksen näkemästään muistista. |
| Go, Rust | 10 ja 100 MB:n välillä | Data, jota sovellus itse pitää muistissa. |
| PostgreSQL | 25 % muistista shared_buffers-asetukselle ja lisäksi muutama megatavu yhteyttä kohden | Usein luetun datan määrä, yhteyksien määrä, work_mem. |
| MySQL, MariaDB | innodb_buffer_pool_size, oletuksena 128 MB | Tietokannalle omistetulla palvelimella tämä puskuri vie yleisesti jopa 80 % muistista. |
| Redis | Datan koko ja lisäksi sen tietorakenteet | Levylle tallennuksen aikana muutetut sivut kopioidaan: pahimmassa tapauksessa muistia kuluu kaksinkertaisesti. |
| Elasticsearch, OpenSearch | Vähintään 2 GB keolle | Keko vie alle puolet muistista: loput toimii tiedostovälimuistina. |
Yksi huippu toistuu JavaScript-sovelluksissa kerta toisensa jälkeen: käännös (build). npm run build Next.js-, Nuxt- tai Angular-projektissa vaatii yleisesti yksinään 1 tai 2 GB muutaman minuutin ajan, kaiken jo käynnissä olevan lisäksi. Palvelimella kääntäminen tarkoittaa mitoittamista tämän huipun mukaan; kun käännätte omalla koneellanne tai jatkuvan integraation putkessa ja siirrätte palvelimelle vain lopputuloksen, huippu jää pois.
Sama päättely pätee Docker-kontteihin: jokainen kontti on joukko tavallisia prosesseja, ja Dockerin taustapalvelu lisää oman kulutuksensa. docker stats näyttää, mitä kukin vie.
Nämä profiilit laskevat yhteen edellä esitellyt osat, huippu ja marginaali mukaan lukien. Ne olettavat tavallisen kokoisen sovelluksen ja julkaisuvaiheen liikenteen; suuri tietokanta tai jatkuvasti kova liikenne siirtää mitoitusta ylöspäin.
| Mitä palvelimella ajetaan | Tarvittava muisti |
|---|---|
| Staattinen sivusto, välityspalvelin, pieni botti tai ajastettu skripti | 1 tai 2 GB |
| Yksi WordPress-sivusto MariaDB:llä ja sivuvälimuistilla | 2 GB |
| WooCommerce-verkkokauppa tai useampi WordPress-sivusto | 4 GB |
| Node.js- tai Python-rajapinta PostgreSQL:llä, ensimmäiset käyttäjät | 4 GB |
| Palvelimella käännetty Next.js-sovellus, sen rajapinta ja PostgreSQL-tietokanta | 6 tai 8 GB |
| Useita sovelluksia konteissa, testi- ja tuotantoympäristö | 8 GB |
| Useiden kymmenien gigatavujen tietokanta intensiivisessä käytössä | 16 GB tai enemmän |
| Palvelimella ajettava kielimalli, jossa on 7 tai 8 miljardia parametria | 16 GB |
Sovellus, joka kutsuu tekoälymallia rajapinnan kautta (OpenAI, Anthropic, Mistral), mitoitetaan kuten mikä tahansa verkkosovellus: malli toimii tarjoajansa palvelimilla, ja palvelimenne odottaa sen vastausta. Mittakaava muuttuu vasta, kun malli ajetaan itse palvelimella.
Käytössä olevalla palvelimella mittaus korvaa arvion. Kolme komentoa kertoo tilanteen:
free -h
ps aux --sort=-rss | head -n 15
vmstat 5 5
free -h: lukekaa sarake available, eli muisti, joka on todella käytettävissä uusien ohjelmien käynnistämiseen. Sarake free on lähes aina matala, ja se on normaalia: Linux täyttää käyttämättömän muistin tiedostovälimuistilla (buff/cache), jonka se vapauttaa heti, kun jokin ohjelma tarvitsee muistia.ps aux --sort=-rss: prosessit varatun muistin mukaan järjestettyinä (sarake RSS, kilotavuina). Tästä näkee, mitä kukin PHP- tai Node.js-prosessi vie.vmstat 5 5: viisi mittausta viiden sekunnin välein. Nollasta poikkeavat arvot sarakkeissa si ja so mittaus toisensa jälkeen kertovat, että palvelin käyttää swap-tilaa: siltä puuttuu muistia.Mitatkaa päivän kuormitetuimpana hetkenä ja satunnaisten tehtävien aikana: käännös, varmuuskopiointi, tuonti. Huippu ratkaisee.
Muistin loppuessa palvelin ei hidastu vähitellen. Kun vapautettavaa ei enää ole, Linux-ydin käynnistää OOM killer -mekanismin (out of memory): se valitsee prosessin, yleensä eniten muistia vievän, ja pysäyttää sen saman tien. Sovelluspalvelimella se on usein tietokanta.
Oireet: ajoittaiset 502- tai 503-virheet, palvelu, joka käynnistyy uudelleen ilman näkyvää syytä, käännös, joka keskeytyy ilmoitukseen Killed. Lokit vahvistavat asian:
journalctl -k | grep -i "out of memory"
systemctl status palvelun-nimi
Komennon systemctl status tulosteessa maininta Failed with result 'oom-kill' tarkoittaa palvelua, joka pysäytettiin muistin puutteen vuoksi.
Swap, jos palvelimella on sellainen, lykkää tätä hetkeä siirtämällä vähiten käytetyn muistin levylle. Se on turvaverkko, ei kapasiteettia: jatkuvasti swapin varassa toimiva palvelin vastaa moninkertaisesti hitaammin, NVMe-SSD-levylläkin.
Korjauskeinot yksinkertaisimmasta kestävimpään: vähentäkää sovelluksen prosessien määrää (pm.max_children, Gunicornin workerit), kääntäkää palvelimen ulkopuolella, rajatkaa tietokannan muistia ja siirtykää sitten suurempaan kokoon.
Muisti ei ole ainoa resurssi: suoritin ratkaisee laskentaa vaativissa tehtävissä (käännös, kuvankäsittely, tekoälymallin ajaminen) ja levy tietokannan ja tiedostojen osalta. Verkkosovelluksen koon ratkaisee kuitenkin lähes aina muisti.
VPS Pro on saatavana kuutena kokona Intel Xeon -suorittimilla, ECC-muistilla ja peilatuilla NVMe-SSD-levyillä, ja se siirtyy suurempaan kokoon milloin tahansa ilman uudelleenasennusta. Kokonaistuki sisältyy: kertokaa meille, mitä palvelimenne tulee ajamaan, niin suosittelemme sopivan koon, ja sen jälkeen teemme jokaisessa kysymyksessä diagnoosin ja kerromme, mitä tehdä, järjestelmästä sovelluksenne koodiin asti.
Staattinen sivusto, välityspalvelin tai pieni skripti toimii 1 tai 2 gigatavun muistilla. Kun tietokanta ja sovellus (PHP, Node.js, Python) jakavat palvelimen, varatkaa 2 GB WordPress-sivustolle ja 4 GB räätälöidylle sovellukselle, jossa on PostgreSQL.
2 GB sivustolle, jossa on MariaDB ja sivuvälimuisti, ja 4 GB WooCommerce-verkkokaupalle tai useammalle sivustolle. PHP-FPM-prosessien määrä on ensimmäinen säädettävä asetus: kukin prosessi vie 40 ja 80 MB:n välillä.
Swap toimii turvaverkkona: se estää äkillisen pysähdyksen, kun muisti täyttyy, mutta jatkuvasti swapia käyttävä palvelin vastaa moninkertaisesti hitaammin, NVMe-SSD-levylläkin. Palvelimen koko valitaan siksi muistin mukaan.
Koska Linux käyttää käyttämätöntä muistia tiedostovälimuistina. Välimuisti vapautuu heti, kun jokin ohjelma tarvitsee muistia. Luettava sarake on available, joka kertoo todella käytettävissä olevan muistin.
Varatkaa 1 tai 2 GB pelkälle käännökselle palvelimella jo käynnissä olevan lisäksi. Kun käännätte omalla koneellanne tai jatkuvan integraation putkessa ja siirrätte palvelimelle vain lopputuloksen, tämä huippu jää kokonaan pois.
Simafri
Jutellaan hankkeestasi
Kerro meille muutamalla sanalla, mitä tarvitset: vastaamme sinulle nopeasti.
Kiitos! Pyyntösi on lähetetty. Vastaamme sinulle pian.
Suositko sähköpostia? Kirjoita meille osoitteeseen support@simafri.com.