Паметта е ресурсът, който най-често определя размера на един сървър: тя свършва първа, а когато свърши, сървърът не се забавя, а спира услуги. Това ръководство дава правилото за изчисление, колко консумира всеки компонент на едно приложение, типични профили и начина да измерите сървър, който вече работи.
available на free -h, а не колоната free.Сървърът не консумира памет „изобщо“: всяка работеща програма заема своя дял, докато работи. Затова изчислението започва от списъка на процесите, които присъстват постоянно, след което добавя пика и резерв:
Памет за предвиждане = (система + постоянни услуги + пик на еднократните задачи) × 1,25
Порядъците по-долу важат за приложение с обичаен размер, измерено в продукция. Те дават отправна точка; измерването на собственото ви приложение, описано по-долу, винаги има последната дума.
| Компонент | Типична памет | Какво я променя |
|---|---|---|
| Nginx, Caddy (уеб сървър, прокси) | 10 до 50 MB | Почти постоянна: броят на връзките тежи малко. |
| PHP-FPM (WordPress, Laravel, Symfony) | 40 до 80 MB на процес | Броят на процесите, ограничен от pm.max_children: 10 процеса са 400 до 800 MB. |
| Node.js (API, Next.js, NestJS) | 60 до 300 MB на процес | Броят на процесите (cluster режим, PM2) и размерът на heap паметта, ограничен от --max-old-space-size. |
| Python (Django, FastAPI, Flask) | 80 до 200 MB на процес | Броят на worker процесите на Gunicorn или Uvicorn и заредените библиотеки: pandas или модел за машинно обучение добавят стотици MB. |
| Java (Spring Boot) | 300 MB до 1 GB на приложение | Максималният размер на heap паметта: по подразбиране JVM си заделя една четвърт от паметта, която вижда. |
| Go, Rust | 10 до 100 MB | Данните, които самото приложение държи в паметта. |
| PostgreSQL | 25 % от паметта за shared_buffers, плюс няколко MB на връзка | Обемът на често четените данни, броят на връзките, work_mem. |
| MySQL, MariaDB | innodb_buffer_pool_size, 128 MB по подразбиране | На сървър, посветен на базата, този буфер обикновено заема до 80 % от паметта. |
| Redis | Размерът на данните, плюс структурите му | По време на запис на диска променените страници се дублират: до двойно в най-лошия случай. |
| Elasticsearch, OpenSearch | Поне 2 GB за heap паметта | Heap паметта не надвишава половината от паметта: останалото служи за кеш на файловете. |
Един пик се връща често при JavaScript приложенията: компилирането. npm run build на проект с Next.js, Nuxt или Angular обикновено изисква само по себе си 1 до 2 GB за няколко минути, в допълнение към всичко, което вече работи. Да компилирате на сървъра означава да го оразмерите за този пик; да компилирате на своя компютър или в непрекъснатата интеграция (CI) и да качвате само резултата означава да го избегнете.
Същото разсъждение важи за Docker контейнерите: всеки контейнер е набор от процеси като всички останали, а Docker демонът добавя собствена консумация. docker stats показва колко заема всеки от тях.
Тези профили събират компонентите от предишния раздел, с включени пик и резерв. Те предполагат приложение с обичаен размер и трафика при старта; обемна база данни или постоянно висок трафик изместват стойността нагоре.
| Какво работи на сървъра | Памет за предвиждане |
|---|---|
| Статичен сайт, прокси, малък бот или планиран скрипт | 1 до 2 GB |
| Един WordPress сайт с MariaDB и кеш на страниците | 2 GB |
| Онлайн магазин с WooCommerce или няколко WordPress сайта | 4 GB |
| API на Node.js или Python с PostgreSQL, първи потребители | 4 GB |
| Приложение с Next.js, компилирано на сървъра, неговото API и база PostgreSQL | 6 до 8 GB |
| Няколко приложения в контейнери, тестова и продукционна среда | 8 GB |
| База данни от няколко десетки GB с интензивно четене | 16 GB и повече |
| Езиков модел със 7 до 8 милиарда параметъра, изпълняван на сървъра | 16 GB |
Приложение, което извиква AI модел през API (OpenAI, Anthropic, Mistral), се оразмерява като всяко уеб приложение: моделът работи при своя създател, а вашият сървър чака отговора му. Изпълнението на модела на самия сървър е това, което променя мащаба.
На сървър в експлоатация измерването заменя оценката. Три команди показват текущото състояние:
free -h
ps aux --sort=-rss | head -n 15
vmstat 5 5
free -h: четете колоната available, паметта, реално достъпна за стартиране на нови програми. Колоната free почти винаги е ниска и това е нормално: Linux запълва неизползваната памет с кеш на файловете (buff/cache), който освобождава веднага щом някоя програма има нужда от него.ps aux --sort=-rss: процесите, подредени по заета памет (колоната RSS, в килобайти). Тук се вижда колко тежи всеки PHP или Node.js worker.vmstat 5 5: пет измервания през пет секунди. Ненулеви стойности в колоните si и so, измерване след измерване, показват сървър, който използва swap: паметта му не стига.Измервайте в най-натоварения момент от деня и по време на еднократните задачи: компилиране, резервно копие, импорт. Решаващ е пикът.
Сървър, на който паметта не стига, не се забавя постепенно. Когато вече няма какво да освободи, ядрото на Linux задейства OOM killer (out of memory): избира процес, обикновено този, който заема най-много памет, и го спира рязко. На сървър с приложение това често е базата данни.
Симптомите: грешки 502 или 503 от време на време, услуга, която се рестартира без видима причина, компилиране, което прекъсва с Killed. Журналите го потвърждават:
journalctl -k | grep -i "out of memory"
systemctl status ime-na-uslugata
В изхода на systemctl status записът Failed with result 'oom-kill' означава услуга, спряна поради липса на памет.
Swap, когато сървърът разполага с такъв, отлага този момент, като премества на диска най-малко използваната памет. Той е предпазна мрежа, а не капацитет: сървър, който постоянно разчита на swap, отговаря няколко пъти по-бавно, дори на NVMe SSD.
Решенията, от най-простото към най-трайното: намалете броя на процесите на приложението (pm.max_children, worker процесите на Gunicorn), компилирайте извън сървъра, ограничете паметта на базата данни, след това преминете към по-голям размер.
Паметта не е единственият ресурс: процесорът има значение за всичко, което изчислява (компилиране, обработка на изображения, изпълнение на AI модел), а дискът за базата данни и файловете. За едно уеб приложение обаче почти винаги паметта определя размера.
VPS Pro се предлага в шест размера, на процесори Intel Xeon, ECC памет и NVMe SSD в огледален режим, и преминава към по-голям размер по всяко време, без преинсталиране. Цялостната поддръжка е включена: опишете ни какво ще работи на сървъра ви и ще ви препоръчаме размера, а след това при всеки въпрос поставяме диагноза и ви казваме какво да направите, от системата до кода на вашето приложение.
Статичен сайт, прокси или малък скрипт работят с 1 до 2 GB. Щом база данни и приложение (PHP, Node.js, Python) споделят сървъра, предвидете 2 GB за WordPress сайт и 4 GB за приложение по поръчка с PostgreSQL.
2 GB за сайт с MariaDB и кеш на страниците, 4 GB за онлайн магазин с WooCommerce или за няколко сайта. Броят на процесите на PHP-FPM е първата настройка: всеки от тях заема 40 до 80 MB.
Не. Swap предотвратява рязкото спиране, когато паметта е пълна, но сървър, който го използва постоянно, отговаря няколко пъти по-бавно, дори на NVMe SSD. Той е предпазна мрежа; размерът се избира по паметта.
Защото Linux използва неизползваната памет като кеш на файловете. Този кеш се освобождава веднага щом някоя програма има нужда от памет. Колоната, която трябва да четете, е available: тя показва паметта, която е реално на разположение.
Предвидете 1 до 2 GB само за компилирането, в допълнение към това, което вече работи на сървъра. Компилирането на вашия компютър или в непрекъснатата интеграция (CI), с качване само на резултата, избягва този пик.
Simafri
Да поговорим за Вашия проект
Кажете ни с няколко думи от какво имате нужда: отговаряме Ви бързо.
Благодарим! Вашето запитване е изпратено. Ще се свържем с вас скоро.
Предпочитате имейл? Пишете ни на support@simafri.com.