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 году
- Формула расчёта CPU нагрузки: разбор на пальцах
- Рабочий пример: считаем нагрузку для веб-сервера на Go
- Частные случаи: базы данных, очереди, фоновые задачи
- Частые ошибки при расчёте CPU нагрузки
- Как отладить высокую нагрузку CPU: пошаговый план
- Инструменты мониторинга и профайлинга: шпаргалка
- Онлайн-калькуляторы: считаем мгновенно
- Краткое резюме: что запомнить
Что такое CPU нагрузка и почему это критично в 2026 году
В 2026 году требования к отзывчивости приложений выросли: пользователи ожидают ответ менее чем за 200 мс, а облачные инстансы стали дороже. CPU нагрузка — процент времени, которое процессор тратит на выполнение задач вашего приложения. Если он регулярно превышает 80%, готовьтесь к деградации и сбоям.
Основные метрики:
- User CPU — время на код приложения;
- System CPU — время на системные вызовы (ядро);
- I/O Wait — процессор ждёт диск/сеть (не чистая нагрузка, но важна).
Для измерения используйте: top, htop, mpstat, а в контейнерах — docker stats. Но чтобы планировать ёмкость, нужно считать заранее.
Формула расчёта CPU нагрузки: разбор на пальцах
Базовая формула (для однопоточного приложения на одном ядре):
- 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 или выделенный пул ресурсов.
- 1Измерьте RPS
С помощью wrk, k6 или логов сервера
- 2Профилируйте CPU time
Запустите profiler (pprof/perf) в пиковый час
- 3Посчитайте утилизацию
По формуле или через калькулятор
- 4Сравните с нормой
Если >80%, требуется оптимизация
- 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: пошаговый план
- Измерьте текущую нагрузку:
top -bn1 | grep 'Cpu(s)' - Найдите процесс-виновник:
ps aux --sort=-%cpu | head -10 - Соберите профиль CPU:
perf record -g -p PID -- sleep 30 - Постройте флейм-граф:
perf script | FlameGraph/stackcollapse-perf.pl | FlameGraph/flamegraph.pl > flame.svg - Оптимизируйте горячие участки: замените тяжёлые вычисления, включите кэш, уменьшите аллокации.
Если не хотите возиться с командной строкой, используйте Калькулятор нагрузки на сервер для оценки влияния каждой оптимизации.
Инструменты мониторинга и профайлинга: шпаргалка
| Инструмент | Команда | Для чего | Примечание |
|---|---|---|---|
| top | top -o %CPU | Быстрый просмотр | Устарел, но везде есть |
| htop | htop | Интерактивный просмотр | Установите через apt/brew |
| mpstat | mpstat -P ALL 1 | Нагрузка по ядрам | Из пакета sysstat |
| perf | perf top -p PID | Профайлинг в реальном времени | Требует прав root |
| pprof (Go) | go tool pprof http://addr/debug/pprof/profile | CPU профиль Go | Встроен в net/http/pprof |
Онлайн-калькуляторы: считаем мгновенно
Ручные расчёты хороши для понимания, но в ежедневной работе удобнее автоматизировать. Вот подборка калькуляторов, которые пригодятся:
- Калькулятор CPU нагрузки приложения — введите RPS, среднее CPU время и ядра — получите утилизацию и рекомендации.
- Калькулятор нагрузки на сайт — оценивает необходимое количество серверов для веб-приложений.
- Калькулятор нагрузки на сервер — помогает спланировать ёмкость под конкретные сценарии.
Остальные калькуляторы (финансовые) не по теме, но они есть на сайте.
Краткое резюме: что запомнить
- Формула: 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 года.
Источники и нормативные документы
- Docker CPU stats документация
- Linux man pages: top, perf
- Go pprof documentation
- Официальный сайт проекта perf