В nginx, какова связь между employee_connections, keepalive_timeout и $connection

В документации по nginx говорится

max_clients = worker_processes * worker_connections

но как фактор keepalive в этом? У меня есть настройка конфигурации с 2 рабочими_процессами и 8192 worker_connections; это означает, что я могу теоретически обрабатывать максимум 16384 одновременных соединений. Выталкивание 16384 потоков данных одновременно является ginormous, но если у меня есть 60s keepalive_timeout, тогда каждый клиент затягивает соединение в течение 1 минуты, это число имеет совершенно другое значение. Что это?

Подключено ко всем это переменная $connection, которая может использоваться с директивой log_format. Я определил следующий формат журнала, чтобы проанализировать производительность сервера:

log_format  perf  '$request_time $time_local $body_bytes_sent*$gzip_ratio $connection $pipe $status $request_uri';

Эта переменная $connection сообщает об 11-12 миллионах подключений! Я не математик, но, очевидно, это число выше, чем work_processes * worker_connections. Итак, что он должен представлять?

Короче говоря, я пытаюсь выяснить, как определить хорошее значение для employee_connection.

Ответы

Ответ 1

$connection - это счетчик, а не общее количество используемых соединений прямо сейчас. Поэтому он должен расти.

Сохраняемые соединения не могут быть отброшены, поэтому в комнате есть рабочие_процессы * employee_connections - keepalive connections

Ответ 2

просто представляйте всю картину: первый клиент подключается к вам, получает файл, а затем браузер поддерживает соединение в течение 60 секунд. другой клиент подключается, получает и поддерживает соединение. в конце первой минуты вы можете иметь (в худшем случае) все клиенты просили что-то у вас за последние 60 секунд, все еще сохраняя открытые соединения

поэтому в худшем случае вы будете обслуживать соединения "worker_processes * worker_connections/keep_alive" за секунду, т.е. около 260 для ваших номеров. если вам нужно больше, вам следует назначить больше подключений - только для обслуживания keepalives: прочитайте мой answerr в Настройка nginx worker_process для получения 100 000 обращений в минуту

afaik nginx может содержать 10k неактивных (keepalived) соединений в 2,5 МБ памяти, поэтому увеличение employee_connections дешево, очень дешево. Я думаю, что основным узким местом здесь может быть ваша ОС.