Сервер Tomcat достигает лимита веб-сокета 2000 соединений - PullRequest
1 голос
/ 11 апреля 2019

В настоящее время у меня есть веб-приложение, построенное на Java 8 для Tomcat 9. Это приложение использует Websockets через javax.websockets + ServerEndpoint и связано с клиентом Javascript.

Когда я стресс-тестирую этот сервер, если число открытых веб-сокетов достигнет 2000 - сервер прекратит обработку запросов до тех пор, пока не закроются некоторые подключения веб-сокетов, и не уменьшит счет до 2000. Сервер не обращается к памяти , дескриптор файла или процессор ограничивает и в основном не имеет ничего в своей очереди на момент остановки, поскольку он обрабатывает реальные транзакции довольно быстро. Что касается моего веб-приложения, оно даже не получает запросы, пока соединения установлены на 2000.

Сервер использует собственный APR для своего HTTP-коннектора и более менее по умолчанию. Я попытался настроить maxConnections и maxThreads, но они, кажется, не влияют на это. Сервер является одним экземпляром EC2 в AWS.

В документации Tomcat я не вижу ничего, кроме этих двух аргументов, которые могли бы контролировать максимальные сокеты. Это запись для нашего разъема

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
    maxThreads="1000" scheme="https"  SSLEnabled="true"
    SSLCertificateFile="conf/cert.crt"
    SSLCertificateKeyFile="conf/nopasskey.pem"
    SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
/>

Я что-то здесь упускаю? Есть ли другие опции, которые контролируют максимально допустимые веб-сокеты?

Примечание: я просто хочу уточнить, когда этот предел будет достигнут, пользователи все равно смогут подключаться к серверу. Однако их соединение, похоже, помещено в какую-то очередь ожидания для обработки, а не просто передается веб-приложению при 2000 соединениях. Это позволяет пользователям по-прежнему подключаться, но они не получат ответ, пока их подключение не будет передано веб-приложению.

1 Ответ

0 голосов
/ 12 апреля 2019

Я полностью просмотрел его, но у меня была запись, перенаправляющая на разъем APR.Это перенаправление на самом деле не работало, так как аргумент redirectPort действителен только для перенаправления на определенные триггеры.

Если этот соединитель поддерживает запросы не-SSL, и запрос получендля которого для сопоставления требуется SSL-транспорт, Catalina автоматически перенаправит запрос на номер порта, указанный здесь.

После установки соединителя APR в качестве основного соединителя и не перенаправления его параметры конфигурации начали работать какпредназначена.Ранее он использовал коннектор HTTP / 1.0 (он же NIO).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...