Софт и сервисы

Хостинг для сайта в 2026 году — почему он ложится при свободном процессоре и как посчитать тариф по нагрузке до покупки

Автор: Редакция 14 минут чтения

Ёмкость тарифа — число одновременных процессов PHP делить на время генерации страницы; посещаемости в этой формуле нет. У REG.RU таких процессов четыре. Как перевести CP и проценты в одну единицу и посчитать свой тариф до оплаты.

Содержание

Ёмкость тарифа считается одной строкой: число одновременных процессов PHP делить на время генерации страницы. У REG.RU на обычных тарифах этих процессов четыре. При 0,4 секунды на страницу тариф держит десять запросов в секунду, при одной секунде — четыре, и ни запросом больше. Посещаемости в этой формуле нет вообще.

Поэтому сайт отдаёт 508 при незагруженных процессоре и памяти. Он упирается не в железо, а в одновременность.

Семь лет назад — тред на Хабр Q&A датируется примерно 2019 годом — пользователь под ником @desolate сделал то, чего не делает почти никто: поставил контролируемый эксперимент. Одна копия сайта на WordPress, два хостера, один тест на сто уникальных посетителей за пять минут. Тариф Fornex за 159 ₽ в месяц отдал 503: процессы 30 из 30, доступность 51,32 %, лимит процессов пробит 2 341 раз за сутки. Тариф Beget за 115 ₽ прошёл тест: доступность 100 %, ответ 0,51 секунды. Дорогой лёг. Дешёвый выстоял. Цены с тех пор не значат ничего, механика — значит всё.

В том треде @desolate задал вопрос, на который никто не ответил: как сравнить «4 ядра и 2048 МБ» у одного с «65 CP и 128 МБ на процесс» у другого. Ответ занимает одну строку, и к концу текста вы посчитаете свой тариф до оплаты. Начать придётся с того, что продавец называет мощностью, а инженер — конкурентностью.

Ёмкость считается в процессах, а не в посетителях

Формула у всех одна: потолок в запросах в секунду равен числу рабочих процессов, делённому на время генерации. Это закон Литтла, выведенный в 1961 году для очередей. На растущей очереди — в пиковые полчаса распродажи — он не работает, для расчёта тарифа годится.

Из формулы следует то, что ломает интуицию покупателя: потолок обратно пропорционален времени генерации. Вдвое медленнее страница — вдвое меньше ёмкость. Не на 10 %, не «чуть хуже» — вдвое.

Одновременных процессов PHP: REG.RU — 4 на обычных тарифах и 32 на VIP; Beget — 30 на домен; Timeweb — 40 на пользователя; SpaceWeb — 64 на аккаунт. Четвёрка REG.RU не напечатана на тарифной странице — она в свёрнутом аккордеоне витрины и в базе знаний. Строчка «Неограниченный трафик» в той же таблице её не отменяет.

Посчитаем в обратную сторону. Блог на WordPress с 30 000 визитов в месяц при глубине просмотра 1,5 даёт 58 500 генераций — 0,023 запроса в секунду. Даже с десятикратным пиком и откликом в полсекунды это 0,11 занятого процесса: блогу хватает одного воркера PHP.

Здесь напрашивается возражение: «у меня триста человек в сутки, и всё летает». Летает. Посещаемость решает, когда вы упрётесь в потолок, а не где этот потолок стоит. Высоту задают два числа — сколько процессов даёт тариф и за сколько генерируется страница. Трафик только подводит к ней.

Отсюда перестаёт быть парадоксом магазин на WooCommerce, который вынес тариф, заявленный на 300 000 визитов в месяц, имея 1 200. Тысяча двести пришли одновременно. Триста тысяч размазаны по тридцати дням.

Тем же различием разводится спор двух заинтересованных сторон. «Сайт от 1 000 посетителей в сутки — берите хотя бы четыре процессора», — говорит партнёр хостинга с реферальной ссылкой под роликом. «Хорошо закэшированный сайт на базовом тарифе держит десятки тысяч в сутки», — отвечает сам хостинг. Первый меряет пик некешируемых генераций, второй — размазанный кешируемый трафик. Спорят они не о хостинге, а о разных сайтах.

Вопрос в том, как владелец узнаёт, что упёрся.

Ошибки не будет

Никак — в двух случаях из трёх.

Во что упёрся сайт и что при этом видит посетитель

Упор в лимит Что получает посетитель
Одновременные подключения 508 Resource Limit Is Reached
Память или число процессов 500 или 503
Процессор или диск Ошибки нет — сайт просто отвечает медленнее

Упор в процессор и в дисковый ввод-вывод не даёт ни кода ошибки, ни письма от провайдера. Сайт просто становится вязким. Владелец полгода валит это на «плохой хостинг» или тяжёлую CMS, меняет тему, чистит плагины, переезжает — и покупает ровно то же самое под другой вывеской.

Диагноз ставится по форме графика в панели, а не по факту ошибки. Линия одновременных процессов упирается в верхнюю границу и идёт по ней ровной полкой, а процессор и память свободно гуляют внизу. Полка сверху, простор снизу — вы уперлись в конкурентность, а не в мощность.

Полка — это и есть момент, когда тариф закончился. Осталось понять, сколько тарифа вы купили.

Одна единица: CP — это процессорная минута в сутки

Провайдеры печатают «CP», «cp», «CPU», «производительность» — и покупатель решает, что сравнить это невозможно. Сравнить можно. Один CP — это одна минута процессорного времени в сутки, а в сутках их 1 440.

Это доказывается тремя независимыми путями. У SpaceWeb на карточке стоит «120 CP», а в справке для того же тарифа — «120 минут процессорного времени в сутки». SprintHost печатает формулу прямым текстом: максимум равен квоте CPU, умноженной на 1 440 минут в сутках. У REG.RU девять пар «процент ядра ↔ CP» сходятся на 1 440, а соседняя строка про MySQL нормирована в секундах и даёт 86 400.

Оговорка, без которой шкала врёт: минута не равна минуте. REG.RU указывал 2 200 МГц на младших тарифах и 3 700 МГц на VIP. Шкала CP сравнивает время, а не работу, и занижает разницу между дешёвым и дорогим. Сравнение честное, но с поправкой на железо.

Теперь то, ради чего всё считалось.

Одинаковая квота процессорного времени стоит по-разному. Цена — за месяц при оплате за год; у Джино скидок за срок нет. Срез 14 сентября 2026

Тариф Квота % одного ядра ₽ в месяц
Джино X1 30 CP 2,1 % 405 ₽ за рабочий комплект
Beget Blog 80 CP 5,6 % 420 ₽
Timeweb Year 100 CP 6,9 % 244 ₽
Beget Start 100 CP 6,9 % 590 ₽
SpaceWeb «Старт» 120 CP 8,3 % 119 ₽
SpaceWeb «Космос» 120 CP 8,3 % 659 ₽
Timeweb Millennium 650 CP 45,1 % 806 ₽

Timeweb Year и Beget Start выдают одну и ту же квоту — 100 минут процессорного времени в сутки — при 244 и 590 ₽ в месяц. Разница в цене 2,4 раза за идентичный ресурс.

У SpaceWeb ещё прямее: четыре тарифа подряд — «Старт», «Взлёт», «Ракета», «Космос» — с одним лимитом 120 CP. Помесячно они стоят от 149 до 755 ₽ — рост в 5,07 раза при неизменном процессоре. Деньги внутри линейки покупают диск и число сайтов. Производительность — не покупают вовсе. Первая ступень, где квота растёт, — «Уран» за 1 499 ₽ в месяц.

Массовый российский тариф — это от 2,5 до 7 % одного ядра в среднем за сутки. Тринадцать процентов — уже старший из обычных тарифов REG.RU, а не норма.

И здесь у шкалы второе дно. SpaceWeb объясняет учёт дословно: «если процесс выполнился за 0.5 секунды, но 0.3 секунды из этого времени он ожидал получения данных с диска/данных из базы данных, то нагрузка, созданная им — 0.2 секунды». Страница, которая две секунды ждёт базу, почти не расходует CP — она тратит не процессор, а терпение. Зато всё это время держит занятым процесс.

Два лимита наказывают за противоположное. Медленная страница жжёт конкурентность, не трогая процессорную квоту, — вот почему сайт ложится при свободном процессоре. Чтобы посчитать это заранее, нужны три числа, которых на витрине нет.

Три числа, которых нет на витрине

Первое — память на один процесс. SpaceWeb даёт 128 МБ, Timeweb и REG.RU — по 1 ГБ, Beget — 6 ГБ. Разброс в 48 раз внутри одного класса услуг. Следствие в один клик: 1С-Битрикс требует memory_limit 256M и в объявленные 128 МБ SpaceWeb не влезает — нужен «Уран», в десять раз дороже «Старта».

Второе — порог, на котором процесс убивают. SpaceWeb убивает его при 10 % процессора в течение 30 секунд, Timeweb — при 90 % в течение десяти минут. Один и тот же импорт прайса у одного умрёт через полминуты, у другого отработает десять. Это не «кто лучше». Это два разных продукта под одним словом.

Третье — inode, число объектов файловой системы. Мы скачали официальные дистрибутивы и посчитали их сами, 14 сентября 2026 года, одной командой:

find wordpress -type f | wc -l     # файлы
find wordpress -type d | wc -l     # каталоги
find wordpress | wc -l             # всего inode

Ядро WordPress 7.1 — 4 250 объектов. WooCommerce — 6 834: один плагин в полтора раза тяжелее всего ядра. Связка с WooCommerce, Elementor и Yoast — 17 668 объектов до первой картинки. Битрикс «Старт» — 47 464, «Бизнес» — 88 870, в 20,9 раза больше ядра WordPress. Считали мы распакованные дистрибутивы — файлы плюс каталоги. Установленный сайт добавит конфигурацию, кеш и контент: это нижняя граница.

Теперь к лимитам. Число публикуют двое из десяти прочитанных провайдеров: Beget — 5 000 000 объектов, REG.RU на обычных тарифах — 150 000. Разница в 33 раза. Timeweb вместо числа пишет «Безлимит», остальные семь молчат. Распакованный «Бизнес» съедает 59 % потолка REG.RU одним дистрибутивом, ещё до кеша, который Битрикс из коробки пишет файлами.

Лимит inode выбирает за вас CMS ещё до первой строчки контента. А расход процессорной квоты за вас выбирает тот, кого вы вообще не считали.

Нагрузку создают боты, а гасит её кеш

Ни один крупный AI-краулер не исполняет JavaScript: на выборке в 500 миллионов обращений GPTBot не нашлось ни одного случая. Счётчик Яндекс.Метрики работает на JavaScript. Бота в Метрике нет.

Дальше арифметика, объясняющая, почему это дорого. Человек открывает страницу — один запрос к PHP и около 76 к статике: картинки, шрифты, стили, скрипты, которые nginx отдаёт за микросекунды. Краулер берёт один запрос к PHP и ноль к статике: дорогой забирает, 76 дешёвых не трогает. По расходу квоты визит бота равен визиту человека — а в счётчике его не существует.

Считать нагрузку по Метрике — значит систематически недосчитать. Смотреть надо логи.

Шоун Пауэрс потратил день на сервер, который вис без причины: чинил базу, вынес её на localhost, перебрал конфигурацию. База была ни при чём. Рабочие процессы PHP мгновенно разбирали Googlebot и FeedBurner, новым запросам места не оставалось. Поддержка SprintHost, отвечая клиенту на превышение лимитов, назвала шесть причин. Известны четыре: плагины WordPress, чересчур активная индексация роботами, запросы к несуществующим страницам и тяжёлые запросы к базе. «Много посетителей» среди них нет.

Против всего этого работает одна вещь, и она бесплатна. На стенде с открытой методикой — WordPress с WooCommerce, восемь воркеров, конкурентность 32 — страница магазина без кеша выдавала 154 запроса в секунду и занимала все восемь ядер. С кешем на стороне Cloudflare — 1 013, и процессор «почти не использовался».

Кеш множит ёмкость. Апгрейд внутри линейки 120 CP не даёт ничего.

Тут вмешивается голос, которому положено продавать апгрейд. На жалобу клиента про постоянные 508 провайдер отвечает: «Вам, скорее всего, просто нужно поставить плагин кеширования». Хостер, зарабатывающий на переходе вверх по линейке, советует бесплатное. На том же стенде объектный кеш дал прибавку: Memcached +5,9 %, Redis +7,8 %, встроенный SQLite — +12,3 %. Бесплатный обошёл оба платных.

Кешируется не всё, и это решает выбор тарифа. Корзина, оформление заказа, личный кабинет, поиск, админка, /wp-json/ и admin-ajax.php идут в PHP каждый раз. Блог с кешем и магазин с корзиной на одной посещаемости — разные тарифы. Осталось понять, сколько попросят на второй год.

Цена продления — это прайс на день списания

Ни один из десяти прочитанных провайдеров не публикует цену продления отдельной величиной. И искать её бесполезно: переключатель на витрине — скидка за длину предоплаты, и при продлении она не сгорает. Слова «продление» нет ни на одной тарифной странице Beget — ни одного вхождения.

Повторяется процент, а не рубль. Цена продления равна прайсу на день списания, а прайс меняется в одностороннем порядке: у Timeweb это записано в пункте 4.5 оферты — тарифы могут быть изменены с уведомлением за семь дней.

На четырёхлетнем окне это видно по архивам Timeweb. Регулярная помесячная цена Millennium выросла с 594 до 1 285 ₽ — плюс 116 %. Витринная за то же время снизилась с 594 до 554 ₽. Обе цифры настоящие, и разницу оплачивает тот, кто вносит деньги на три года вперёд. Зачёркнутое число на витрине — помесячный тариф, а не «цена продления»: переключатель предвыбран на максимальный срок.

Разрыв «реклама → работающий сайт» по восьми провайдерам: Джино ×3,14, SprintHost ×2,63, NetAngels ×2,51, Timeweb ×2,18, Majordomo ×2,01. Медиана чуть больше двух. Правило простое: умножай витринную цену на два, если не вносишь всю сумму сразу.

У Джино за кратностью стоит вот что: «от 129 ₽» — аккаунт без PHP, без базы и без диска, а рабочий комплект собирается из пяти строк и стоит 405 ₽.

А IHC печатает дату собственного подорожания прямо на карточке: «147 ₽ / месяц — с 1 октября цена 210 ₽». По линейке рост от 40,4 до 42,9 %. Все цены здесь — срез 14 сентября 2026 года, и у одной строки срок годности известен точно: семнадцать дней.

Что с этим делать

Формула, ради которой всё считалось, состоит из двух строк:

Потолок тарифа, запросов/с = число одновременных процессов / время генерации
Расход в сутки, минут CPU  = генераций в сутки × CPU-время генерации / 60

Сайт на WordPress с 3 000 некешированными генерациями в сутки при 0,4 секунды процессорного времени на страницу: 3 000 × 0,4 / 60 = 20 минут CPU в сутки. Это влезает даже в Джино X1 с его 30 CP. Тот же сайт при 30 000 генераций — вырос вдесятеро или пришли боты — требует 200 минут, а это уже уровень SpaceWeb «Уран» или Beget Bitrix-1.

Проверить всё это можно за вечер:

  • Откройте phpinfo() и посмотрите два числа — memory_limit и max_execution_time. Они скажут о тарифе больше, чем строчка «4 ядра»: именно они решили исход того теста на Хабре.
  • Посчитайте inode до оплаты: find /путь -type f | wc -l и df -i. Сравните с лимитом тарифа, если провайдер его публикует.
  • Измерьте вес своего воркера сами: ps -eo pid,rss,command | grep php-fpm после нескольких часов реального трафика. Чужим оценкам верить нечего — они расходятся от 15 до 180 МБ, а протокол замера не публикует никто.
  • Читайте логи, а не счётчик. Добавьте $upstream_response_time в формат лога, 95-й перцентиль достаётся одной строкой: awk '{print $NF}' access.log | sort -n | awk '{a[NR]=$1} END{print a[int(NR*0.95)]}'.

И прогоните свой тест на копии сайта — ровно как @desolate: одна копия, один тест, два тарифа. С одной оговоркой: нагрузочное тестирование часто запрещено правилами виртуального хостинга, а в тестовом периоде Timeweb нет cron и закрыты исходящие порты, так что померить реальную нагрузку на пробном доступе нельзя по построению.

Тот вопрос с Хабра — как сравнить «4 ядра и 2048 МБ» с «65 CP и 128 МБ на процесс» — решается теперь в одну строку: CP это процессорная минута, в сутках их 1 440, дальше делите. Но историю @desolate решило вообще не это. Дорогой тариф лёг из-за memory_limit 128M и тридцати секунд на скрипт — двух чисел, которых ни на одной витрине не печатают.

Хостинг продают в гигабайтах и сайтах. Ложится он в процессах.