
У меня настроен Docker с Nginx в качестве обратного прокси для сервисов Tomcat. При большой нагрузке (тестирование) я получаю скачки времени отклика.
Оказывается, один экземпляр сервиса Tomcat без Nginx работает лучше, чем несколько сервисов с Nginx перед ними, так что проблема между Nginx и Tomcats. При дальнейшем осмотре я определил, что время upstream_connect_time Nginx увеличивается до 3 с, иногда даже до 7 с.
Я пробовал играть с keepalive, keepalive_connections, proxy_connect_timeout, worker_processes и worker_connections на Nginx, но ничего не помогает. Далее в моем списке — попробовать более высокие значения для Tomcat max_connections.
В чем может быть причина высокого значения upstream_connect_time?
решение1
Я решил эту проблему, добавив
proxy_http_version 1.1;
proxy_set_header Connection "";
Без них keepalive ничего не значит, поэтому моя настройка параметра keepalive не дала никакого эффекта.
Если я правильно понимаю, http 1.1 позволяет использовать одно и то же соединение для одновременных ответов и запросов, а добавление Connection "" в заголовок используется для того, чтобы соединение оставалось открытым.
Проще говоря, ранее я говорил Nginx, что ему разрешено использовать сообщения keepalive в восходящем направлении, но я не настроил его так, чтобы он знал, как поддерживать соединение открытым (тут есть http 1.1 и заголовок Connection), поэтому сообщения keepalive не использовались.
В конце концов, при правильной настройке этих двух параметров значение keepalive 500 оказалось достаточным для «нормальной» производительности, но значение keepalive 1000 было сохранено для учета ситуаций с высоким трафиком.