Рассчитайте загрузку CPU вашего приложения, необходимое количество ядер или максимальную пропускную способность. Удобный калькулятор с примерами и формулами.
Рассчитайте процент загрузки процессора вашим приложением, необходимое количество ядер или максимальную пропускную способность на основе времени CPU и нагрузки.
Калькулятор использует три основные формулы, основанные на законе Литтла и принципах планирования CPU:
Загрузка CPU (%) = (CPU_время_на_запрос_мс × RPS) / (Ядра × 1000) × 100Необходимо ядер = (CPU_время_на_запрос_мс × RPS) / (Целевая_загрузка × 1000)Максимальный RPS = (Ядра × Целевая_загрузка × 1000) / CPU_время_на_запрос_мсГде CPU_время_на_запрос_мс — чистое процессорное время обработки одного запроса в миллисекундах, RPS — количество запросов в секунду, Целевая_загрузка — желаемая доля загрузки CPU (от 0 до 1).
Шаг 1. Определите среднее время CPU, которое приложение тратит на обработку одного запроса. Это значение можно получить из профилировщика или систем мониторинга (например, параметр cpu_time в логах).
Шаг 2. Измерьте или спрогнозируйте входящую нагрузку — количество запросов в секунду (RPS), которое приложение должно обрабатывать.
Шаг 3. Укажите количество физических или виртуальных ядер CPU, доступных приложению. Для контейнеризированных сред это лимит, заданный в настройках.
Шаг 4. Калькулятор вычисляет общее процессорное время, необходимое для обработки всех запросов, и сравнивает его с доступной ёмкостью (ядра × 1000 мс/с). Результат — процент загрузки или требуемые ресурсы.
В: Что такое CPU-время на запрос и где его взять?
О: Это чистое процессорное время, затраченное на обработку одного запроса, без учёта ожидания ввода-вывода. Его можно получить через Application Performance Monitoring (APM) системы: New Relic, Datadog, OpenTelemetry, или профилировщики типа pprof, async-profiler.
В: Почему результат в режиме «Необходимо ядер» дробный?
О: Расчёт даёт точное математическое значение. В реальности нужно округлять вверх до ближайшего целого числа ядер. Например, 3.2 ядра означает, что 3 ядра будут перегружены, нужно минимум 4.
В: Можно ли использовать калькулятор для многопоточных приложений?
О: Да. Главное — корректно измерить суммарное CPU-время по всем потокам, участвующим в обработке запроса. Современные APM-решения делают это автоматически.
В: Что делать, если загрузка CPU получается больше 100%?
О: Это означает, что приложение требует больше процессорного времени, чем доступно. Запросы будут вставать в очередь, расти задержки. Нужно либо увеличить количество ядер, либо уменьшить RPS, либо оптимизировать код.
В: Как учесть Hyper-Threading?
О: Указывайте количество физических ядер. Если вы используете виртуальные потоки, умножьте их количество на 0.3 и прибавьте к физическим ядрам. Например, 4 ядра + HT (8 потоков) ≈ 4 + 4×0.3 = 5.2 эффективных ядра.
В: Насколько точен этот расчёт?
О: Калькулятор даёт теоретическую оценку в предположении линейной масштабируемости. В реальности из-за блокировок, кэш-эффектов и GC фактическая загрузка может отличаться на 10–20%. Всегда проверяйте расчёты нагрузочным тестированием.
Расчёт основан на классической теории массового обслуживания и законе Литтла (L = λ × W), адаптированной для процессорного времени. Формулы выведены из определения утилизации CPU как отношения занятого времени к общему доступному времени. Методология подтверждается практиками capacity planning от Google SRE, AWS Well-Architected Framework и руководствами по нагрузочному тестированию из книги «Systems Performance» Брендана Грегга.
Загрузка центрального процессора — ключевой показатель здоровья любого онлайн-сервиса. Когда приложение потребляет слишком много CPU, растут задержки ответа, клиенты получают ошибки тайм-аута, а в худшем случае сервер падает. С другой стороны, недостаточная загрузка означает, что вы платите за избыточные ресурсы, которые простаивают без дела.
Понимание того, как ваше приложение использует процессор, помогает принимать обоснованные инженерные решения: когда пора оптимизировать код, сколько ядер заказывать у облачного провайдера, выдержит ли текущая архитектура чёрную пятницу или запуск рекламной кампании.
В этой статье мы разберём, как устроен процессорный ресурс, что именно измеряет наш калькулятор, и как применять полученные цифры на практике — от разработки до продакшена.
Представьте, что ваш веб-сервер обрабатывает запрос на получение профиля пользователя. Сервер получает запрос, идёт в базу данных, ждёт ответа 15 миллисекунд, затем формирует JSON, ждёт отправки по сети ещё 2 миллисекунды, и отдаёт клиенту. Общее время ответа — 20 миллисекунд. Но процессор был занят только 3 миллисекунды — остальное время ядро простаивало в ожидании базы данных и сети.
Именно эти 3 миллисекунды и есть CPU-время. Оно измеряет чистую вычислительную работу: парсинг запроса, сериализацию JSON, проверку прав доступа, выполнение бизнес-логики. Время ожидания внешних систем — дисков, сети, других сервисов — не тратит ресурсы процессора и не учитывается в загрузке CPU.
Фундаментальная идея проста: у одного ядра процессора есть 1000 миллисекунд в секунду для выполнения работы. Если приложение тратит 300 мс процессорного времени в секунду на одном ядре, загрузка составляет 30%. Если у вас 4 ядра, доступный бюджет увеличивается до 4000 мс в секунду. Загрузка в 30% на 4 ядрах означает, что приложение использует эквивалент 1.2 полностью загруженного ядра.
Калькулятор берёт время CPU на один запрос, умножает на количество запросов в секунду и сравнивает с общим доступным бюджетом ядер. Результат — это процент утилизации, который показывает, насколько плотно приложение использует имеющиеся вычислительные ресурсы.
Сценарий 1: Диагностика существующего сервиса. Вы мониторите продакшен и видите, что RPS составляет 200, время CPU на запрос — 12 мс, сервер имеет 8 ядер. Калькулятор показывает загрузку (12 × 200) / (8 × 1000) × 100 = 30%. Сервер недогружен, можно уменьшить количество ядер и сэкономить на облачных расходах.
Сценарий 2: Планирование новой фичи. Вы ожидаете, что после запуска нового функционала RPS вырастет с 500 до 800. Текущее время CPU — 4 мс, ядер — 8. Загрузка была (4 × 500) / (8 × 1000) × 100 = 25%. Станет (4 × 800) / (8 × 1000) × 100 = 40%. Всё ещё комфортно, сервер справится.
Сценарий 3: Выбор конфигурации для нового микросервиса. Прототип показывает время CPU 6 мс на запрос, ожидаемый RPS — 1500. При целевой загрузке 0.7 калькулятор говорит: нужно (6 × 1500) / (0.7 × 1000) = 12.86 → 13 ядер. Вы заказываете инстанс с 16 ядрами и имеете запас на рост.
Самый надёжный источник — production-трейсинг. Инструменты вроде Jaeger, Zipkin или коммерческие Datadog APM, New Relic показывают разбивку времени обработки запроса, включая CPU-время. Альтернативно, можно использовать профилировщики на стадии нагрузочного тестирования: запустите pprof для Go, async-profiler для Java, py-spy для Python под нагрузкой и снимите профиль CPU.
Для приблизительных оценок на ранних этапах разработки проведите бенчмарк: измерьте время выполнения ключевого алгоритма в микросекундах с помощью функции timing вашего языка. Усредните по тысячам итераций — это даст нижнюю границу CPU-времени.
Самая распространённая ловушка — принимать wall-clock время ответа за CPU-время. Если ваш сервис ходит в три внешних API, и каждое отвечает 50 мс, а ваша логика занимает 2 мс, реальное CPU-время — 2 мс, хотя клиент ждёт 152 мс. Использование 152 мс в формуле даст завышенную в 76 раз загрузку и приведёт к покупке ненужных ресурсов.
Другая тонкость — нелинейность. Когда загрузка приближается к 70–80%, начинают проявляться эффекты очередей и contention на блокировках. Реальное CPU-время на запрос может расти, потому что потоки чаще ждут освобождения мьютекса. Поэтому закладывайте запас, не планируйте загрузку выше 70% в целевых показателях.
Для веб-сервисов с короткими запросами (до 100 мс) допустимая средняя загрузка — до 70%. Для систем реального времени (игры, биржевые терминалы) — не выше 50%, чтобы гарантировать низкую latency. Для фоновых обработчиков (batch jobs) допустима загрузка 90–95%, так как кратковременные задержки не критичны.
Используйте калькулятор, чтобы проверить свои гипотезы перед масштабированием или оптимизацией. Точные цифры избавят вас от дорогих ошибок и помогут построить действительно надёжный и экономичный сервис.
Задайте вопрос по этому калькулятору
Осталось вопросов: 5. Только по этому инструменту.
Нужен другой инструмент?
Все инструменты в категории