Нагрузка и ограничения
Производительность зависит от обработчика, числа worker, codec, размера сообщений и внешних сервисов. При планировании ёмкости измеряйте своё приложение, а не переносите число RPS из другого сервиса.
Что измерять
Заголовок раздела «Что измерять»- Пропускную способность и p50/p95/p99 времени ответа при фиксированном числе клиентов.
- CPU/RSS каждого worker, число открытых соединений и файловых дескрипторов.
- Длину send buffer и число срабатываний onBufferFull/onBufferDrain.
- Тайм-ауты, ошибки подключения, HTTP 4xx/5xx и разрывы долгих соединений.
Начните с короткого echo/health handler, затем добавляйте БД и прикладную обработку. Если event loop задерживает все соединения одного worker, найдите синхронный I/O или CPU-участок в callback. Увеличение worker не исправляет неограниченный буфер и не даёт общей памяти процессам.
Воспроизводимый прогон
Заголовок раздела «Воспроизводимый прогон»Зафиксируйте commit приложения, PHP/extensions, backend, worker count, лимиты ОС, размер payload, длительность прогрева и профиль клиентов. Генератор нагрузки запускайте отдельно от измеряемого процесса. Сравнивайте варианты при одинаковых timeout/error правилах; не исключайте ошибки из отчёта latency.
Для долгих WebSocket/SSE измеряйте reconnect, медленных читателей и поведение при rollout. HTTP RPS не описывает ёмкость долгих соединений.