Сколько памяти и ядер нужно сайту
Большинству сайтов хватает 2 ГБ памяти и одного-двух ядер, магазину с тысячами товаров нужно 4 ГБ и два ядра. Память важнее ядер: когда её не хватает, сайт тормозит или падает, а лишнее ядро без памяти почти ничего не даёт. Ниже покажу, как посчитать память под свой сайт и как узнать, сколько он тратит на самом деле.
Если сайт ещё не запущен и вы не знаете, сколько брать, начните с 2 ГБ памяти и одного-двух ядер. Этого хватает блогу, сайту компании и небольшому магазину на WordPress, а у большинства хостеров тариф потом можно увеличить без переустановки. Если сайт уже работает, гадать не нужно: за пять минут можно посмотреть, сколько памяти он занимает, и взять тариф с запасом процентов в 30.
Чаще всего ошибаются в одну сторону: берут четыре ядра и 1 ГБ памяти, потому что ядра звучат солиднее. Для сайта это плохая пара. PHP и база данных съедают гигабайт за минуты, сервер начинает перекладывать память на диск, и страницы открываются по несколько секунд, хотя процессор при этом почти свободен.
Что дают за эти деньги
Я взял около 27 700 тарифов VPS от 2 200 хостеров из каталога accsly на 27 октября 2026 года, разложил их по цене за месяц и для каждой ступени нашёл середину по памяти, ядрам и диску.
| Цена в месяц | Память | Ядра | Диск |
|---|---|---|---|
| до 300 ₽ | 1 ГБ | 1 | 20 ГБ |
| 300–600 ₽ | 2 ГБ, у четверти 1 ГБ | 1 | 25 ГБ |
| 600–1 000 ₽ | 2 ГБ | 2 | 40 ГБ |
| 1 000–2 000 ₽ | 4 ГБ | 2 | 60 ГБ |
| 2 000–4 000 ₽ | 8 ГБ | 4 | 100 ГБ |
| 4 000–8 000 ₽ | 12 ГБ | 6 | 160 ГБ |
Обычная пропорция на рынке — одно ядро на 2 ГБ памяти. Тарифы с 2 ГБ делятся почти поровну: у половины одно ядро, у половины два. С 4 ГБ два ядра у 61% тарифов, с 8 ГБ четыре ядра у 57%.
В России те же объёмы стоят дешевле. Серверы с 4 ГБ памяти в российских дата-центрах в середине рынка стоят 1 351 ₽ в месяц, а по всем странам — около 1 800 ₽. Подборки по объёму: VPS с 2 ГБ, VPS с 4 ГБ, VPS с 8 ГБ.
Куда уходит память на сервере с сайтом
Сайт на PHP с базой данных делит память между четырьмя потребителями. Если знать их аппетиты, нужный объём считается на бумажке.
- Сама система. Свежая Ubuntu или Debian после запуска занимает 150–300 МБ.
- Веб-сервер nginx — десятки мегабайт, его можно не считать.
- PHP-FPM. Каждый рабочий процесс PHP занимает 40–100 МБ, а у WordPress с десятком плагинов или у Битрикса бывает и больше. Процессов столько, сколько запросов сайт обрабатывает одновременно.
- MySQL или MariaDB. Главный потребитель. База держит в памяти свой буфер с данными и индексами, плюс по несколько мегабайт на каждое соединение.
Панель управления вроде ispmanager или FastPanel добавит ещё 200–500 МБ, Redis для кеша — от 50 МБ до размера того, что вы в нём храните.
Допустим, у вас магазин на WooCommerce с 5 000 товаров и базой на 800 МБ. Система займёт 300 МБ, буфер базы под все данные с запасом — 1 ГБ, сама база сверху ещё 300 МБ, 15 процессов PHP по 80 МБ — 1,2 ГБ, Redis — 100 МБ. Получается около 3 ГБ. На сервере с 4 ГБ остаётся гигабайт, который Linux использует как кеш файлов, и это хорошо. На 2 ГБ магазин тоже запустится, но буфер базы и число процессов PHP придётся урезать вдвое, и в часы распродажи страницы каталога станут медленнее.
А сколько нужно ядер?
Меньше, чем кажется. Одно ядро в каждый момент выполняет один запрос PHP. Если страница собирается за 200 мс, ядро успевает отдать пять таких страниц в секунду, а два ядра — десять.
Переведём в посетителей. Сайт с 10 000 посетителей в день показывает около 30 000 страниц. В самый загруженный час приходится примерно десятая часть, 3 000 страниц, то есть меньше одной в секунду. С этим справляется одно ядро. Второе пригодится, чтобы админка, импорт товаров, резервное копирование и поисковые роботы не тормозили сайт для посетителей. А если включён кеш страниц, большая часть запросов вообще не доходит до PHP.
Ядра нужны там, где много страниц нельзя закешировать: фильтры каталога, поиск, корзина, личный кабинет. Ещё их съедают тяжёлые фоновые задачи, например обработка картинок, выгрузка в маркетплейсы и импорт прайсов. И несколько сайтов на одном сервере.
Платить за ядра впрок обидно. При 4 ГБ памяти тариф с четырьмя ядрами в середине рынка стоит 2 415 ₽, а с двумя — 1 690 ₽, разница 725 ₽ в месяц. При 8 ГБ разница между двумя и четырьмя ядрами всего около 260 ₽, так что на этом объёме четыре ядра уже почти бесплатны. Для PHP ещё важна частота: одна страница собирается на одном ядре, и на 4,5 ГГц она будет готова заметно быстрее, чем на 2,2 ГГц. Такие тарифы в подборке VPS с высокой частотой процессора.
Что брать под типичные сайты
- Лендинг, статичный сайт, визитка без базы данных — 1 ГБ и одно ядро. Это самые дешёвые тарифы, переплачивать тут не за что: VPS с 1 ГБ.
- Блог или сайт компании на WordPress с кешем — 2 ГБ и одно-два ядра: VPS для WordPress.
- Магазин на тысячи товаров на WooCommerce, OpenCart или PrestaShop — 4 ГБ и два ядра: VPS для интернет-магазина.
- Битрикс — от 4 ГБ, а для магазина с большим каталогом 8 ГБ и четыре ядра: VPS для Битрикса.
- Приложение на Laravel с очередями и Redis — 2–4 ГБ: каждый обработчик очереди держит в памяти свой процесс PHP. Подборка: VPS для Laravel.
- Несколько сайтов и панель управления — сложите потребности сайтов и добавьте 0,5–1 ГБ на панель.
Сколько памяти сайт тратит на самом деле
Зайдите на сервер по SSH и выполните:
free -m
Вывод будет примерно таким:
total used free shared buff/cache available
Mem: 3915 1720 240 60 1955 1890
Swap: 1023 12 1011
Не пугайтесь маленького числа в столбце free. Linux занимает свободную память под кеш файлов, это столбец buff/cache, и отдаёт её программам по первому требованию. Смотреть нужно на available: здесь у сервера 1,9 ГБ, которые программы могут взять прямо сейчас. Если available в часы пик меньше 10% от total, памяти мало.
Вторая проверка — использует ли сервер подкачку:
vmstat 1 10
Команда десять раз с интервалом в секунду печатает строку с цифрами. Смотрите на столбцы si и so: сколько данных сервер за секунду читает из подкачки и пишет в неё. Нули — всё в порядке, даже если в строке Swap у free что-то занято. Если там постоянно сотни и тысячи, сервер перекладывает память на диск, и сайт от этого тормозит сильнее, чем от любой другой беды.
Третья — не убивала ли система процессы из-за нехватки памяти. Когда память кончается совсем, ядро Linux выбирает самый крупный процесс, часто это MySQL, и завершает его. Для посетителей это выглядит как ошибка «Error establishing a database connection» или 502.
journalctl -k | grep -i -E 'out of memory|killed process'
Если команда что-то нашла, памяти не хватило хотя бы раз. Берите тариф больше или уменьшайте аппетиты PHP и базы, как показано ниже.
Кто съел память: htop и ps
Запустите htop (на Ubuntu и Debian ставится командой apt install htop) и нажмите M, чтобы отсортировать процессы по памяти. Столбец RES показывает, сколько процесс занимает в оперативной памяти. Наверху обычно будут mysqld или mariadbd и длинный хвост процессов php-fpm.
Посчитать, сколько памяти уходит на PHP в целом и на один процесс, можно одной строкой:
ps -eo rss,comm | awk '/php-fpm/ {s+=$1; n++} END {printf "%d процессов, %.0f МБ всего, %.0f МБ на процесс\n", n, s/1024, s/n/1024}'
Итог получится немного завышенным, потому что процессы PHP делят часть памяти между собой. Для оценки этого достаточно. Запустите команду днём, когда на сайте есть посетители: ночью процессы спят и выглядят меньше.
Средний размер процесса подскажет, сколько процессов PHP можно разрешить. Решите, сколько памяти отдаёте под PHP, и поделите на размер процесса. Например, 1 200 МБ при 80 МБ на процесс дают 15 процессов. Это число записывается в параметр pm.max_children в файле пула, на Ubuntu и Debian это /etc/php/8.3/fpm/pool.d/www.conf, где 8.3 — ваша версия PHP. Если поставить больше, при наплыве посетителей PHP займёт всю память и система начнёт убивать процессы. Если меньше, лишние запросы будут ждать в очереди, зато сервер останется жив.
Буфер MySQL: главный потребитель и главный рычаг
База данных работает быстро, пока её данные и индексы помещаются в буфер в памяти. Узнать, сколько весят таблицы, можно запросом в консоли mysql:
SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024) AS mb
FROM information_schema.tables WHERE engine = 'InnoDB';
Текущий размер буфера:
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
После установки он часто равен 128 МБ. Для магазина с базой на 800 МБ это слишком мало: каждый фильтр каталога будет читать диск. Хватает ли буфера, покажут два счётчика:
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';
Разделите Innodb_buffer_pool_reads на Innodb_buffer_pool_read_requests. Первое число — сколько раз базе пришлось идти на диск, второе — сколько всего было чтений. Если частное меньше 0,01, то есть на диск уходит меньше 1% чтений, буфера хватает. Смотрите эти цифры после того, как сервер проработал хотя бы сутки.
Буфер стоит сделать равным размеру данных плюс 10–20% на рост, но на сервере, где рядом работает PHP, не больше половины всей памяти. Значение задаётся строкой innodb_buffer_pool_size = 1G в разделе [mysqld] конфигурации (на Ubuntu это /etc/mysql/mysql.conf.d/mysqld.cnf, у MariaDB — файл в /etc/mysql/mariadb.conf.d/), после чего базу нужно перезапустить. Если база не помещается даже в половину памяти, это честный повод взять тариф больше. И быстрый диск в такой ситуации тоже помогает, об этом в статье NVMe или SSD для сайта.
Когда добавлять память, а когда ядра
Памяти мало, если available в пик падает ниже 10%, в vmstat не нули в si и so или в журнале есть убитые процессы. Добавлять ядра тут бесполезно.
Ядер мало, если память свободна, а сайт под нагрузкой медленный. Проверьте командой uptime: три числа в конце строки показывают среднюю нагрузку за 1, 5 и 15 минут. Сравните их с числом ядер из команды nproc. Если нагрузка в часы пик подолгу выше числа ядер, а в htop процессор занят процессами php-fpm, нужны ядра или кеш страниц, который часто дешевле.
Есть два случая, когда новый тариф у того же хостера не поможет. Если в top в строке %Cpu(s) высокое значение st, хотя бы 10%, процессор у вас отбирают соседи по физическому серверу. Помогает только другой хостер или тариф с выделенными ядрами. Если высокое wa, процессор ждёт диск, и решать нужно вопрос с диском, а не с ядрами.
Если сомневаетесь между двумя размерами, берите меньший у хостера, где тариф можно поднять из панели за пару минут. Перед покупкой посмотрите в описании, можно ли менять тариф без переустановки. А если хочется проверить сайт на нескольких конфигурациях, удобна почасовая оплата: сервер на вечер стоит десятки рублей. Остальные параметры тарифа разобраны в статье как выбрать VPS.