Paměť je prostředek, který nejčastěji určuje velikost serveru: dochází jako první, a když dojde, server nezpomalí, ale začne ukončovat služby. Tento průvodce uvádí pravidlo výpočtu, spotřebu jednotlivých součástí aplikace, typické profily a způsob, jak měřit na serveru, který už běží.
available příkazu free -h, ne sloupec free.Server nespotřebovává paměť „obecně“: každý běžící program si drží svůj díl, dokud běží. Výpočet proto vychází ze seznamu procesů, které běží trvale, a pak k nim přidává špičku a rezervu:
Potřebná paměť = (systém + trvalé služby + špička příležitostných úloh) × 1,25
Níže uvedené řády platí pro aplikaci běžné velikosti, měřenou v produkci. Jsou výchozím bodem; poslední slovo má vždy měření na vaší vlastní aplikaci, popsané dále.
| Součást | Typická paměť | Na čem spotřeba závisí |
|---|---|---|
| Nginx, Caddy (webový server, proxy) | 10 až 50 MB | Téměř stálá: počet připojení váží málo. |
| PHP-FPM (WordPress, Laravel, Symfony) | 40 až 80 MB na proces | Počet procesů, omezený direktivou pm.max_children: 10 procesů znamená 400 až 800 MB. |
| Node.js (API, Next.js, NestJS) | 60 až 300 MB na proces | Počet procesů (režim cluster, PM2) a velikost haldy, omezená parametrem --max-old-space-size. |
| Python (Django, FastAPI, Flask) | 80 až 200 MB na proces | Počet workerů Gunicornu nebo Uvicornu a načtené knihovny: pandas nebo model strojového učení přidají stovky MB. |
| Java (Spring Boot) | 300 MB až 1 GB na aplikaci | Maximální velikost haldy: JVM si ve výchozím nastavení bere čtvrtinu paměti, kterou vidí. |
| Go, Rust | 10 až 100 MB | Data, která si aplikace sama drží v paměti. |
| PostgreSQL | 25 % paměti pro shared_buffers a několik MB na každé připojení | Objem často čtených dat, počet připojení, work_mem. |
| MySQL, MariaDB | innodb_buffer_pool_size, ve výchozím nastavení 128 MB | Na serveru vyhrazeném databázi tento buffer běžně zabírá až 80 % paměti. |
| Redis | Velikost dat plus jejich struktury | Během ukládání na disk se změněné stránky duplikují: v nejhorším případě až dvojnásobek. |
| Elasticsearch, OpenSearch | Nejméně 2 GB pro haldu | Halda nepřesahuje polovinu paměti: zbytek slouží jako mezipaměť souborů. |
U javascriptových aplikací se často opakuje jedna špička: sestavení (build). npm run build na projektu Next.js, Nuxt nebo Angular běžně sám potřebuje 1 až 2 GB, po dobu několika minut, navíc k tomu, co už běží. Sestavovat na serveru znamená dimenzovat pro tuto špičku; sestavit aplikaci na svém počítači nebo v CI a na server nahrát jen výsledek znamená se jí vyhnout.
Stejná úvaha platí pro kontejnery Docker: každý kontejner je sada procesů jako každá jiná a démon Dockeru přidává vlastní spotřebu. docker stats ukazuje, kolik si bere každý z nich.
Tyto profily sčítají předchozí součásti, včetně špičky a rezervy. Předpokládají aplikaci běžné velikosti a provoz v době spuštění; objemná databáze nebo trvale vysoký provoz posouvají nároky výš.
| Co na serveru běží | Potřebná paměť |
|---|---|
| Statický web, proxy, malý bot nebo naplánovaný skript | 1 až 2 GB |
| Web na WordPressu s MariaDB a cache stránek | 2 GB |
| E-shop na WooCommerce nebo několik webů na WordPressu | 4 GB |
| API v Node.js nebo Pythonu s PostgreSQL, první uživatelé | 4 GB |
| Aplikace Next.js sestavovaná na serveru, její API a databáze PostgreSQL | 6 až 8 GB |
| Několik aplikací v kontejnerech, testovací a produkční prostředí | 8 GB |
| Databáze o několika desítkách GB, intenzivně využívaná | 16 GB a více |
| Jazykový model se 7 až 8 miliardami parametrů spuštěný na serveru | 16 GB |
Aplikace, která volá model AI přes API (OpenAI, Anthropic, Mistral), se dimenzuje jako kterákoli jiná webová aplikace: model běží u svého poskytovatele a váš server čeká na odpověď. Řádově jiné nároky přináší až spuštění modelu přímo na serveru.
Na serveru v provozu nahrazuje odhad měření. Tři příkazy ukážou, jak na tom jste:
free -h
ps aux --sort=-rss | head -n 15
vmstat 5 5
free -h: čtěte sloupec available, tedy paměť skutečně dostupnou pro spuštění nových programů. Sloupec free je téměř vždy nízký a je to v pořádku: Linux zaplňuje nevyužitou paměť mezipamětí souborů (buff/cache), kterou uvolní, jakmile ji některý program potřebuje.ps aux --sort=-rss: procesy seřazené podle obsazené paměti (sloupec RSS, v kilobajtech). Právě zde vidíte, kolik váží každý worker PHP nebo Node.js.vmstat 5 5: pět měření v pětisekundových intervalech. Nenulové hodnoty ve sloupcích si a so, měření za měřením, prozrazují server, který swapuje: chybí mu paměť.Měřte v nejvytíženější době dne a během příležitostných úloh: sestavení, zálohy, importu. Rozhoduje špička.
Server, kterému dochází paměť, nezpomaluje postupně. Když už není co uvolnit, jádro Linuxu spustí OOM killer (out of memory): vybere proces, obvykle ten, který zabírá nejvíc paměti, a okamžitě ho ukončí. Na aplikačním serveru je to často databáze.
Příznaky: občasné chyby 502 nebo 503, služba, která se bez zjevného důvodu restartuje, sestavení, které skončí hláškou Killed. Logy to potvrdí:
journalctl -k | grep -i "out of memory"
systemctl status nazev-sluzby
Ve výstupu systemctl status označuje hláška Failed with result 'oom-kill' službu ukončenou kvůli nedostatku paměti.
Swap, pokud ho server má, tento okamžik oddálí tím, že nejméně používanou paměť přesune na disk. Slouží jako záchranná síť, ne jako kapacita: server, který swap využívá nepřetržitě, odpovídá několikanásobně pomaleji, i na SSD NVMe.
Řešení, od nejjednoduššího po nejtrvalejší: snížit počet procesů aplikace (pm.max_children, workery Gunicornu), sestavovat mimo server, omezit paměť databáze a pak přejít na vyšší velikost.
Paměť není jediný prostředek: procesor rozhoduje u všeho, co počítá (sestavení, zpracování obrázků, běh modelu AI), disk u databáze a souborů. U webové aplikace však velikost téměř vždy určuje právě paměť.
VPS Pro nabízí šest velikostí na procesorech Intel Xeon, paměti ECC a zrcadlených SSD NVMe a na vyšší velikost přejde kdykoli, bez reinstalace. Komplexní podpora je v ceně: popište nám, co bude váš server provozovat, doporučíme vám velikost a pak u každé otázky stanovíme diagnózu a řekneme vám, co udělat, od systému až po kód vaší aplikace.
Statický web, proxy nebo malý skript běží v 1 až 2 GB. Jakmile server sdílí databáze a aplikace (PHP, Node.js, Python), počítejte se 2 GB pro web na WordPressu a se 4 GB pro aplikaci na míru s PostgreSQL.
2 GB pro web s MariaDB a cache stránek, 4 GB pro e-shop na WooCommerce nebo několik webů. Prvním nastavením je počet procesů PHP-FPM: každý zabírá 40 až 80 MB.
Ne. Swap zabrání náhlému ukončení procesů, když je paměť plná, ale server, který ho využívá nepřetržitě, odpovídá několikanásobně pomaleji, i na SSD NVMe. Je to záchranná síť; velikost se volí podle paměti.
Protože Linux využívá nevyužitou paměť jako mezipaměť souborů. Tato mezipaměť se uvolní, jakmile ji některý program potřebuje. Číst je třeba sloupec available, který udává skutečně dostupnou paměť.
Počítejte s 1 až 2 GB jen pro sestavení, navíc k tomu, co už na serveru běží. Sestavení na vašem počítači nebo v CI a nahrání pouze výsledku této špičce předejde.
Simafri
Promluvme si o vašem záměru
Řekněte nám v pár slovech, co potřebujete: rychle se vám ozveme.
Děkujeme! Vaše zpráva byla odeslána. Brzy se vám ozveme.
Máte raději e-mail? Napište nám na support@simafri.com.