У нас есть приложение, которое отправляет сообщения пользователям для доступа к нашему серверу (Apache tomcat) через HTTPS-соединение со своими устройствами. Проблема в том, что это пользовательское приложение поддерживает соединение (или открыто) на нашем сервере Tomcat.
Пытаясь решить эту проблему, мы настроили наш коннектор с maxThreads="2700"
и connectionTimeout="20000"
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true"
maxThreads="2700" scheme="https" secure="true"
keystoreFile="********" keystorePass="*****"
clientAuth="false" sslProtocol="TLS" connectionTimeout="20000"
ciphers="[lots of ciphers here]"/>
Дело в том, что наш сервер оказывается в состоянии занятости, и мы не можем получить доступ даже к странице менеджера. В прошлый раз, когда мы могли получить к нему доступ, раздел http-nio-8443 на странице менеджера был:
"http-nio-8443"
Max threads: 2700 Current thread count: 1356 Current thread busy: 1354
Keeped alive sockets count: 1 Max processing time: 46426 ms Processing time: 6766.788 s
Request count: 73225 Error count: 1415 Bytes received: 17.77 MB Bytes sent: 12.28 MB
А ниже список всех подключенных клиентов с подробностями их подключений. В этом разделе они отмечены знаком «S» службы.
Поскольку наша система знает, что эти соединения больше не должны быть активными (мы знаем, что у нас может быть проблема либо в приложении для телефона, либо на нашем сервере)
Итак, мой вопрос, не убивая кота, есть ли способ убить эти соединения в коте? Или другой способ тоже подойдет.
Начиная с версии 4.5 ядро Linux поддерживает операцию SOCK_DESTROY, позволяя уничтожать сокеты (включая те, которые подключены к TCP / IP-соединениям), например, с помощью ss(8)
. Например, вот сеанс ssh:
$ set | grep SSH_CLIENT
SSH_CLIENT='127.0.0.1 52266 22'
$
Видя связь с ss
:
# ss dst 127.0.0.1:52266
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 127.0.0.1:ssh 127.0.0.1:52266
Убивает соединение:
# ss --kill dst 127.0.0.1:52266
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 127.0.0.1:ssh 127.0.0.1:52266
Убито:
$ packet_write_wait: Connection to 127.0.0.1 port 22: Broken pipe
$