Caminho para matar conexões de http nio no Tomcat

1

Temos um aplicativo que envia mensagens aos usuários para acessar nosso servidor (Apache tomcat) por meio de uma conexão HTTPS com seus dispositivos. O problema é que esses aplicativos de usuários estão mantendo a conexão viva (ou aberta) em nosso servidor Tomcat.

Na tentativa de resolvê-lo, configuramos nosso conector com maxThreads="2700" e 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]"/>

O problema é que nosso servidor fica em um estado ocupado e não podemos nem acessar a página do gerenciador. A última vez que conseguimos acessar a seção http-nio-8443 da página de gerente foi:

"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

E abaixo disso, uma lista de todos os clientes conectados com os detalhes de suas conexões. Eles estão marcados nesta seção com "S" de serviço

Como nosso sistema sabe que essas conexões não devem mais estar ativas (sabemos que podemos ter um problema no aplicativo do telefone ou no nosso servidor)

Então, minha pergunta é, sem matar o tomcat, existe uma maneira de matar essas conexões no tomcat? Ou outro método também seria bom.

    
por Jorge Campos 23.06.2016 / 22:16

1 resposta

2

Desde 4.5, o kernel do Linux suporta a operação SOCK_DESTROY, permitindo destruir soquetes (incluindo aqueles conectados a conexões TCP / IP), por exemplo, com ss(8) . Por exemplo, aqui está uma sessão ssh:

$ set | grep SSH_CLIENT
SSH_CLIENT='127.0.0.1 52266 22'
$

Vendo a conexão com 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

Eliminando a conexão:

# 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

Matado:

$ packet_write_wait: Connection to 127.0.0.1 port 22: Broken pipe
$

Artigo do LWN com informações sobre SOCK_DESTROY

    
por 01.07.2016 / 01:42