Как рассчитать нагрузку на сервер: формулы для веб-проектов и API
Формулы расчёта RPS, concurrent connections, потребления RAM и CPU. Нагрузочное тестирование через wrk и k6.
Для расчёта нагрузки: 1) Определите RPS (запросов/сек) = DAU × Avg_Pages / 86400 × Peak_Factor. 2) Рассчитайте concurrent users = RPS × Response_Time. 3) CPU ≈ concurrent users / 2 (для PHP/Python). 4) RAM = workers × memory_per_worker + OS + СУБД. Для 50 000 DAU: ~60 RPS в пике → 4 vCPU, 8 ГБ RAM.
- Формула Little: Concurrent Users = RPS × Avg Response Time (sec). 100 RPS × 0.2 сек = 20 concurrent.
- Формула RAM для PHP: RAM_workers = max_children × memory_limit. 20 × 256 МБ = 5 ГБ.
- Формула CPU: каждый worker PHP-FPM или Gunicorn потребляет ~1 ядро при полной загрузке.
- Всегда тестируйте: wrk или k6 на staging-сервере покажут реальный потолок.
Шаг 1: Оцениваем RPS из бизнес-метрик
RPS (Requests Per Second) — главная метрика нагрузки. Считается из бизнес-данных:
RPS_avg = DAU × Pages_Per_Session / 86400
RPS_peak = RPS_avg × Peak_Factor (обычно 3–5× для e-commerce, 2–3× для контентных сайтов)
Пример: 50 000 DAU, 5 страниц за сессию, пик ×4 = 50000 × 5 / 86400 × 4 ≈ 12 RPS_avg, 46 RPS_peak. С учётом AJAX/API-запросов (×2–3): ~60–140 RPS в пике.
# Калькулятор серверной нагрузки
dau = 50_000 # уникальных посетителей в день
pages_per_session = 5 # страниц за сессию
api_factor = 2.5 # AJAX/API запросов на каждую страницу
peak_factor = 4 # пиковый множитель
response_time = 0.15 # среднее время ответа (сек)
rps_avg = dau * pages_per_session / 86400
rps_peak = rps_avg * peak_factor * api_factor
concurrent = rps_peak * response_time
print(f"RPS средний: {rps_avg:.1f}")
print(f"RPS пиковый: {rps_peak:.1f}")
print(f"Concurrent connections: {concurrent:.0f}")
print(f"Рекомендация CPU: {max(2, int(concurrent / 3))} vCPU")
print(f"Рекомендация RAM: {max(4, int(concurrent * 0.3))} ГБ")Шаг 2: Нагрузочное тестирование
Формулы — это оценка. Реальные цифры даёт только нагрузочный тест. Разверните копию проекта на staging-сервере и прогоните wrk или k6:
# wrk — быстрый HTTP-бенчмарк
wrk -t4 -c100 -d30s http://staging.example.com/
# k6 — более гибкий инструмент для сценариев
k6 run --vus 50 --duration 60s script.js
# Результат покажет:
# - Requests/sec (RPS)
# - Latency p50, p95, p99
# - Errors (5xx, timeouts)Проверенные серверы от надежных провайдеров
Timeweb Cloud
Cloud Start
CPU
1 ядер • 3.3 ГГц
RAM
1 ГБ
Диск
15 ГБ NVMe
Канал
200 Мбит/с
299 ₽/мес
Selectel
Cloud Lite 1
CPU
1 ядер • 2.6 ГГц
RAM
1 ГБ
Диск
10 ГБ SSD
Канал
200 Мбит/с
550 ₽/мес
Часто задаваемые вопросы (FAQ)
Как узнать текущую нагрузку на сервер?
htop — CPU и RAM в реальном времени. iostat -x 1 — дисковая нагрузка. ss -s — количество TCP-соединений. Для мониторинга 24/7 — ставьте Prometheus + Grafana.
Мой сайт на WordPress — сколько RPS он выдержит?
WordPress без кэширования на 2 vCPU / 4 ГБ RAM — ~20–30 RPS. С WP Super Cache / Redis — ~200–400 RPS. С Nginx FastCGI Cache — ~2000+ RPS (отдаёт статику из памяти).