Скорость сайта

Лимиты shared-хостинга: CPU, память, процессы и ошибка 503

Что такое лимиты процессов и памяти, почему сайт отдаёт 503 в час пик, как посмотреть расход ресурсов и что реально помогает.

обновлено 8 минут чтения 2 Дмитрий Акиндинов
Содержание
  1. Какие лимиты вообще стоят на виртуальном хостинге
  2. Как это выглядит для посетителя
  3. Где смотреть графики расхода и как поймать час пик
  4. Кто реально съедает ресурсы
  5. Что помогает без смены тарифа
  6. Когда честнее переехать
  7. Частые вопросы

На виртуальном хостинге ограничивают четыре вещи: процессорное время, суммарную память процессов PHP, скорость диска и число одновременных процессов. Ошибка 503 в вечерний час пик почти всегда означает упор в процессор, а не поломку сайта.

Сайт открывается нормально утром, а каждый день около семи вечера, ровно когда трафик в пике, отдаёт 503 или белый экран на десять-пятнадцать минут. Поддержка хостинга отвечает «у вас превышение лимитов», но не говорит, каких именно и что с этим делать. Разбираю, какие лимиты вообще стоят на виртуальном хостинге, как увидеть расход своими глазами, кто их обычно съедает и что реально помогает без немедленного перехода на VPS.

Индикатор загрузки ресурсов сервера на пределе шкалы

За шесть лет обслуживания сайтов малого бизнеса эта жалоба, наверное, третья по частоте после «сайт не открывается» и «плагин что-то тормозит». Разница в том, что здесь проблема не в коде сайта, а в договоре между вами и хостингом: он продал место в общем доме и честно ограничил, сколько вы можете шуметь.

Какие лимиты вообще стоят на виртуальном хостинге

Shared-хостинг это один физический сервер, на котором живут сотни аккаунтов одновременно. Чтобы один сайт не положил остальных, хостер режет ресурсы на уровне контейнера каждого аккаунта. Технология у большинства массовых хостеров называется CloudLinux LVE (Lightweight Virtual Environment), но суть одна и на других решениях.

ЛимитЧто ограничиваетТипичное значение на массовых тарифахЧто видит посетитель при превышении
CPUПроцент процессорного времени на аккаунт25-100 процентов одного ядраЗамедление, потом 503
Physical MemoryСуммарная память всех PHP-процессов аккаунта512 МБ — 2 ГБFatal error, белый экран, 503
Entry ProcessesЧисло одновременных PHP-процессов8-20Отказ новых подключений, 503
I/OСкорость чтения-записи на диск1-10 МБ/сЗависание при загрузке файлов, долгий ответ
IOPSЧисло операций чтения-записи в секунду512-1024Общее торможение при пиковой нагрузке

Важный нюанс: лимиты считаются не на сайт, а на аккаунт хостинга целиком. Если на одном тарифе живёт три сайта клиента, они делят один и тот же потолок памяти и процессов между собой.

Как это выглядит для посетителя

Разные лимиты дают разные симптомы, и по симптому можно примерно понять, во что вы упёрлись, ещё до того, как открыли графики:

  • 503 Service Unavailable — чаще всего превышение Entry Processes: сервер физически не может открыть ещё один процесс PHP под ваш аккаунт, новые запросы ставятся в очередь или отбрасываются.
  • 508 Resource Limit Is Reached — фирменный код CloudLinux LVE, почти всегда означает упор в CPU или память конкретно вашего контейнера, а не сервера целиком.
  • Белый экран без текста ошибки — PHP-процесс убит по памяти на середине выполнения, ответ не успел сформироваться.
  • Долгая загрузка, потом обрыв соединения — запрос встал в очередь на ограниченный пул процессов и не дождался освобождения.

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

Где смотреть графики расхода и как поймать час пик

В cPanel это раздел «Использование ресурсов текущего аккаунта» (CloudLinux LVE Manager), там отдельные графики по CPU, памяти, числу процессов и I/O с историей обычно за последние сутки. В ISPmanager аналогичный раздел называется «Статистика ресурсов». В личных кабинетах Timeweb и Beget графики находятся в разделе конкретного сайта или тарифа.

Если графиков в панели нет, а доступ есть только по SSH, быстрая проверка текущей нагрузки:

top -u $(whoami)
cat /proc/loadavg

Чтобы поймать сам момент упора в лимит постфактум, ищите характерные строки в error.log:

grep -iE "exceeded|resource temporarily unavailable|out of memory" /home/user/logs/error.log | tail -50

Часовой пик у большинства сайтов малого бизнеса приходится на 10:00-12:00 (рабочий трафик) и 19:00-21:00 (вечерний трафик с телефонов), но у интернет-магазинов бывает смещение к выходным и к моментам рекламных рассылок. Сопоставьте время из графика ресурсов с временем жалоб от клиента или с собственным мониторингом, обычно совпадение прямое.

Кто реально съедает ресурсы

По моей практике в девяти случаях из десяти виноват не трафик от живых посетителей, а один из следующих источников:

  • Боты и парсеры. SEO-краулеры конкурентов, парсеры цен, а в последние пару лет ещё и боты AI-компаний, которые обходят сайт целиком без всякого кэша в браузере, генерируя нагрузку сопоставимую с тысячами реальных визитов.
  • WP-Cron, который запускается на каждом хите. Штатный механизм WordPress проверяет отложенные задачи при каждом заходе посетителя, если сайт не настроен иначе. На сайте с трафиком это лишний PHP-процесс на каждый визит.
  • admin-ajax.php под нагрузкой. Корзина WooCommerce, живой поиск, счётчики «сейчас смотрят» — всё это синхронные AJAX-запросы, которые держат отдельный PHP-процесс на время выполнения.
  • Поиск по сайту без индекса. Штатный поиск WordPress и многих других CMS выполняет полнотекстовый LIKE-запрос по всей таблице записей, при большом каталоге это заметная нагрузка на каждый ввод в строку поиска.
  • Синхронные обращения к внешним API. Плагины антиспама, курсов валют, доставки, которые дергают внешний сервис прямо во время генерации страницы и держат процесс открытым, пока не дождутся ответа.

Что помогает без смены тарифа

Полезно начать с того же чек-листа, что применяю на клиентских сайтах, когда 503 появляется впервые:

  • [ ] Включить полностраничный кэш страниц (WP Super Cache, LiteSpeed Cache при поддержке хостером), чтобы отдавать статику без запуска PHP на каждый визит
  • [ ] Ограничить доступ ботов и парсеров через robots.txt и правила в .htaccess
  • [ ] Перевести WP-Cron на системный крон вместо запуска при каждом хите
  • [ ] Отключить лишние AJAX-вызовы (heartbeat API, cart fragments) на страницах, где они не нужны
  • [ ] Проверить и почистить разбухшую базу данных, если сайт живёт больше двух-трёх лет
  • [ ] Свериться с gzip и Brotli сжатием на сервере, это снижает нагрузку на канал, хотя и не напрямую на CPU

Перевод WP-Cron на системный крон делается двумя шагами. Сначала отключаем встроенный запуск:

// wp-config.php
define('DISABLE_WP_CRON', true);

Затем добавляем задание в системный crontab хостинга, например раз в 5 минут:

*/5 * * * * curl -s https://example.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Такая замена убирает лишний PHP-процесс на каждый визит и переносит нагрузку на предсказуемое расписание, а не на случайные пики трафика. Про то, как в целом устроено кэширование средствами самого сервера, писал в статье про кэширование через .htaccess, а сжатие gzip и Brotli на канале, хоть и не снимает нагрузку с CPU напрямую, тоже стоит проверить заодно.

Если сайту просто три года и на нём накопилось два десятка неактуальных плагинов, разумно для начала прочитать почему WordPress тормозит после трёх лет: часто половина найденной там чистки снимает и упор в лимиты хостинга заодно, без апгрейда тарифа.

Отдельно стоит проговорить один момент, который клиенты почти всегда упускают: сам факт наличия кэша не гарантирует, что он реально работает на каждой странице. Часто плагин кэша стоит и включен, но исключения в его настройках (страницы с параметрами в адресе, страницы с формами, вся категория товаров) выключают кэш именно там, где нагрузка выше всего. После включения кэша обязательно проверьте заголовок ответа сервера:

curl -sI https://example.ru/ | grep -i "x-cache|age:"

Если заголовка со статусом кэша нет вовсе или он показывает MISS на втором и третьем подряд запросе, кэш не отдаёт готовую страницу, а генерирует её заново каждый раз, то есть толку от него для лимитов ноль.

Когда честнее переехать

Апгрейд тарифа или переход на VPS стоит денег каждый месяц, а не разово, поэтому решение имеет смысл считать, а не принимать по ощущению. Формула простая: сравните разницу в стоимости тарифов за месяц со стоимостью потерь от простоев, которые уже происходят.

Если 503 случается пару раз в месяц на пять минут и заявок с сайта в это время почти нет, апгрейд может не окупаться. Если сайт падает каждый вечер в час пик на 15-20 минут, а именно вечером идёт основной поток заявок, разница в тарифе на VPS обычно 1500-4000 рублей в месяц против регулярной потери реальных клиентов, которые просто не дождались загрузки и ушли к конкуренту. При выборе конкретного нового тарифа стоит свериться с материалом как выбрать хостинг малому бизнесу, там разбор именно по параметрам, которые здесь и упираются в лимиты.

Отдельно стоит смотреть на тренд, а не на разовый случай. Если полгода назад лимитов хватало, а сейчас начались регулярные упоры, дело не в хостинге, а в том, что сайт вырос (больше каталог, больше плагинов, больше трафика), и рано или поздно апгрейд всё равно понадобится. Вопрос только в том, до или после серии потерянных заявок.

Возьмём конкретную прикидку. Сайт услуг с формой заявки, средний чек 25 000 рублей, конверсия из посетителя в заявку около 2 процентов. Если вечерний пик даёт обычно 300 визитов за два часа, а сайт из-за 503 недоступен 20 минут из этих двух часов, это примерно 50 потерянных визитов и, грубо, одна упущенная заявка за вечер. Одна заявка в 25 000 рублей уже перекрывает разницу в тарифе на VPS за половину месяца. Если такие падения случаются хотя бы раз в неделю, а не раз в квартал, апгрейд окупается быстрее, чем кажется на первый взгляд, и это не абстрактная рекомендация, а обычная арифметика на бумажке.

Если сайт прямо сейчас лежит в час пик и разбираться с логами и графиками самостоятельно некогда, опишите ситуацию через форму на сайте: такую диагностику делаю в рамках разовой работы или абонентского обслуживания, с конкретным ответом, где именно упор и что с этим реально делать. Тарифы на постоянное сопровождение сайта, куда входит и мониторинг подобных ситуаций, смотрите в разделе с ценами.

Частые вопросы

Какие лимиты стоят на виртуальном хостинге

Процессорное время в пределах доли ядра, память всех процессов PHP от 512 МБ до пары гигабайт, скорость чтения и записи на диск, число одновременных процессов. Превышение любого даёт замедление или ошибку.

Почему сайт падает каждый вечер

Потому что в час пик вы упираетесь в процессорный лимит. Утром трафика меньше, и тот же сайт открывается нормально. Смотреть надо графики расхода ресурсов в панели хостинга, а не логи ошибок.

Что съедает ресурсы чаще всего

Тяжёлые плагины, поиск по сайту без кэша, генерация страниц для ботов, крон, запущенный слишком часто, и запросы к базе без индексов. Реальные посетители обычно не главная статья расхода.

Что помогает без смены тарифа

Кэш страниц для анонимных посетителей, ограничение частоты крона, отключение лишних плагинов и блокировка назойливых парсеров. Часто этого хватает, чтобы уйти от предела.

Передайте техническую часть в надёжные руки.

Слежу за хостингом, бэкапами и обновлениями. Когда что-то пойдёт не так – звоните мне, не своему программисту, не в спортзал и не маме.

Короткие вопросы по теме

Все вопросы по теме "Скорость сайта"

Заявка

Обсудим задачу

Напишите имя и телефон, выберите удобный канал. Перезвоню или напишу в течение часа в рабочее время.

Куда удобнее ответить?