CPU нагрузка приложения: формула, примеры и калькулятор

💻 IT и кодОбновлено: 13 июля 2026 г.4 мин чтения
Приложение тормозит, серверы платят счёт — а вы гадаете, хватит ли CPU? Хватит гадать. Формула расчёта нагрузки CPU + точный пример + онлайн-калькулятор, который сделает всё за вас.
⚡ Коротко: главное
  • Формула CPU нагрузки: CPU_Utilization = (Requests_per_second × Avg_CPU_Time_per_Request × 100) / Number_of_CPU_Cores, где Avg_CPU_Time_per_Request в секундах.
  • Для веб-приложений типичная нагрузка: 20-40% CPU в пике считается нормальной, выше 80% — сигнал к масштабированию.
  • Калькулятор CPU нагрузки приложения автоматически подставляет нормы 2026 года и считает за секунду.

Что такое CPU нагрузка и почему это критично в 2026 году

В 2026 году требования к отзывчивости приложений выросли: пользователи ожидают ответ менее чем за 200 мс, а облачные инстансы стали дороже. CPU нагрузка — процент времени, которое процессор тратит на выполнение задач вашего приложения. Если он регулярно превышает 80%, готовьтесь к деградации и сбоям.

Основные метрики:

  • User CPU — время на код приложения;
  • System CPU — время на системные вызовы (ядро);
  • I/O Wait — процессор ждёт диск/сеть (не чистая нагрузка, но важна).

Для измерения используйте: top, htop, mpstat, а в контейнерах — docker stats. Но чтобы планировать ёмкость, нужно считать заранее.

Формула расчёта CPU нагрузки: разбор на пальцах

Базовая формула (для однопоточного приложения на одном ядре):

CPU_Utilization = (Requests_per_second × Avg_CPU_Time_per_Request) × 100 / Number_of_Cores
  • Requests_per_second (RPS) — сколько запросов в секунду приходит;
  • Avg_CPU_Time_per_Request (сек) — сколько времени процессор работает на один запрос (из профайлера);
  • Number_of_Cores — количество ядер CPU (ядер, не потоков!).

Если приложение многопоточное, формула усложняется: суммируйте время по всем потокам, но делите на ядра. Подводный камень: не путайте wall-clock time (реальное время) и CPU time (активная работа).

Рабочий пример: считаем нагрузку для веб-сервера на Go

Пример: у вас Go-приложение, обрабатывающее 1000 RPS. Профилирование показало, что каждый запрос потребляет 5 мс CPU. Сервер — 4-ядерный.

Requests_per_second = 1000
Avg_CPU_Time = 0.005 сек
Cores = 4

CPU_Util = (1000 * 0.005) * 100 / 4 = (5) * 100 / 4 = 125%

Результат 125% — нагрузка превышает 100%, значит сервер не справляется. Нужно либо оптимизировать код (снизить CPU Time), либо добавить ядер. Реальный совет: держите запас 30-40%, т.е. для такого RPS нужно минимум 8 ядер.

Чтобы не считать вручную, используйте Калькулятор CPU нагрузки приложения — введите RPS, время запроса и число ядер.

Частные случаи: базы данных, очереди, фоновые задачи

Базы данных: CPU нагрузка часто нелинейна из-за блокировок. Если приложение шлёт 500 параллельных запросов, а БД использует 8 ядер — каждый запрос может ждать блокировку, увеличивая CPU time формально, но не утилизируя ядра. Считайте средний активный запрос.

Очереди (Kafka/RabbitMQ): потребление CPU сильно зависит от размера сообщения и сериализации. Пример: 10 000 сообщений/сек по 1 КБ требуют ~2 мс CPU на сообщение → 20 секунд CPU в секунду, нужно 20 ядер.

Фоновые задачи: их нагрузку добавляйте к пиковой. Если раз в час запускается отчёт, используйте стратегию off-peak или выделенный пул ресурсов.

Расчёт CPU нагрузки за 5 шагов
  1. 1
    Измерьте RPS

    С помощью wrk, k6 или логов сервера

  2. 2
    Профилируйте CPU time

    Запустите profiler (pprof/perf) в пиковый час

  3. 3
    Посчитайте утилизацию

    По формуле или через калькулятор

  4. 4
    Сравните с нормой

    Если >80%, требуется оптимизация

  5. 5
    Оптимизируйте код/масштаб

    Исправьте горячие участки или добавьте ядер

Пошаговый план от измерения до оптимизации

Частые ошибки при расчёте CPU нагрузки

  • Путаница между CPU time и реальным временем: profiler'ы часто показывают wall time. Используйте pprof с опцией -seconds для CPU time.
  • Игнорирование I/O Wait: если диск медленный, процессор простаивает, но нагрузка кажется низкой. Меряйте iowait через mpstat.
  • Неучтённая конкуренция за кэш: на NUMA-архитектурах не все ядра равны. Используйте алгоритмы привязки к ядру (CPU pinning).
  • Линейная экстраполяция: нагрузка часто нелинейна. Например, при увеличении RPS в 2 раза CPU может вырасти в 2.5 раза из-за GC и блокировок.

Совет: снимите профиль нагрузки с помощью wrk или k6 при разных RPS и постройте регрессию.

Чек-лист: готовый план расчёта CPU

0 из 7

Как отладить высокую нагрузку CPU: пошаговый план

  1. Измерьте текущую нагрузку: top -bn1 | grep 'Cpu(s)'
  2. Найдите процесс-виновник: ps aux --sort=-%cpu | head -10
  3. Соберите профиль CPU: perf record -g -p PID -- sleep 30
  4. Постройте флейм-граф: perf script | FlameGraph/stackcollapse-perf.pl | FlameGraph/flamegraph.pl > flame.svg
  5. Оптимизируйте горячие участки: замените тяжёлые вычисления, включите кэш, уменьшите аллокации.
Если не хотите возиться с командной строкой, используйте Калькулятор нагрузки на сервер для оценки влияния каждой оптимизации.

Инструменты мониторинга и профайлинга: шпаргалка

ИнструментКомандаДля чегоПримечание
toptop -o %CPUБыстрый просмотрУстарел, но везде есть
htophtopИнтерактивный просмотрУстановите через apt/brew
mpstatmpstat -P ALL 1Нагрузка по ядрамИз пакета sysstat
perfperf top -p PIDПрофайлинг в реальном времениТребует прав root
pprof (Go)go tool pprof http://addr/debug/pprof/profileCPU профиль GoВстроен в net/http/pprof

Онлайн-калькуляторы: считаем мгновенно

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

Остальные калькуляторы (финансовые) не по теме, но они есть на сайте.

Краткое резюме: что запомнить

  • Формула: CPU% = (RPS × время запроса × 100) / ядра.
  • Норма: держите ниже 80%, запас 30-40%.
  • Инструменты: top, perf, pprof.
  • Ошибки: не путайте wall time и CPU time; не экстраполируйте линейно.

🧮 Посчитайте сами — инструменты по теме

🧭 Разделы по теме

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

Какой процент CPU считается нормальным для веб-приложения?

Для веб-приложений норма — 20-40% в пике, выше 80% критично. Если нагрузка стабильно 70%, заложите запас на рост.

Чем отличается CPU time от реального времени в профайлере?

CPU time — время, которое процессор активно выполнял код приложения. Реальное время (wall time) может быть больше из-за ожидания ввода-вывода, блокировок и диспетчеризации.

Как посчитать CPU нагрузку для многопоточного приложения?

Сложите CPU time всех потоков за секунду, разделите на число ядер и умножьте на 100. Например, если 4 потока суммарно потребляют 2 секунды CPU на 4 ядрах, нагрузка 50%.

Как быстро измерить нагрузку без профилировщика?

Используйте top: колонка %CPU для процесса. Но учтите, что top показывает процент относительно всех ядер (например, 100% на 4 ядрах = 400%).

Что делать, если нагрузка процессора прыгает от 10% до 100%?

Проверьте I/O wait — возможно, диск медленный. Также посмотрите на GC (в Java/Go) или паузы в работе очередей. Используйте mpstat и iostat для диагностики.

Сколько ядер CPU нужно для 5000 RPS при среднем времени запроса 10 мс?

По формуле: нагрузка = (5000*0.01*100)/N = 5000/N. Чтобы нагрузка была ≤80%, нужно N ≥ 62.5, то есть 64 ядра. Рекомендуем 80 с запасом.

Какой инструмент лучше для профилирования CPU в 2026 году?

Для Linux — perf (бесплатно, ядерный). Для Go — pprof (встроен). Для Java — async-profiler. Для контейнеров — cAdvisor и Kubernetes metrics.

Зачем нужен онлайн-калькулятор, если есть формула?

Калькулятор здесь экономит время, не даёт ошибиться в расчётах и учитывает типовые нормы 2026 года.

Источники и нормативные документы

  1. Docker CPU stats документация
  2. Linux man pages: top, perf
  3. Go pprof documentation
  4. Официальный сайт проекта perf

Ещё по теме «IT и код»