2 votes

Comment supprimer les connexions http nio dans Tomcat ?

Nous avons une application qui envoie des messages aux utilisateurs pour qu'ils accèdent à notre serveur (Apache tomcat) via une connexion HTTPS avec leurs appareils. Le problème est que l'application de l'utilisateur garde la connexion vivante (ou ouverte) dans notre serveur Tomcat.

Pour tenter de résoudre ce problème, nous avons configuré notre connecteur avec les éléments suivants maxThreads="2700" y 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]"/>

Le problème est que notre serveur est très occupé et que nous ne pouvons même pas accéder à la page du gestionnaire. La dernière fois que nous avons pu y accéder, la section http-nio-8443 de la page manager était :

"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

Et en dessous, une liste de tous les clients connectés avec les détails de leurs connexions. Ils sont marqués dans cette section par un "S" de service.

Dans notre système, nous savons que ces connexions ne devraient plus être actives (nous savons que nous avons un problème soit dans l'application téléphonique, soit dans notre serveur).

Ma question est donc la suivante : sans tuer le tomcat, existe-t-il un moyen de supprimer ces connexions dans le tomcat ? Je ne sais pas si c'est possible, mais c'est une bonne idée.

3voto

songsong Points 173

Depuis la version 4.5, le noyau Linux prend en charge l'opération SOCK_DESTROY, qui permet de détruire les sockets (y compris ceux qui sont liés à des connexions TCP/IP), par exemple à l'aide de la commande ss(8) . Voici par exemple une session ssh :

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

En voyant le lien avec 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

Tuer la connexion :

# 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

Tué :

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

Article de LWN avec des informations sur SOCK_DESTROY

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X