2 votes

Serveur mysql, connexions "mortes" ouvertes

Ma question de base est la suivante : quel est l'impact sur le serveur ?

Disons, par exemple, qu'il existe un ancien programme dans mon entreprise qui ouvre des connexions à un serveur de base de données mysql à un taux élevé (tout ce qu'ils font avec l'application ouvre en fait des connexions au serveur). Cependant, cette application n'a pas été conçue pour éliminer les connexions une fois qu'elles ont été créées. La plupart du temps, les connexions restent ouvertes mais ne sont plus jamais utilisées, des connexions ouvertes "mortes" en quelque sorte.

Elles restent connectées jusqu'à ce que le serveur les interrompe ou jusqu'à ce qu'un administrateur les supprime manuellement. Je suppose que cela pourrait être responsable des erreurs d'impossibilité de connexion, etc. que nous recevons parfois d'autres systèmes qui tentent d'accéder à la base de données mysql ? (limite de connexions atteinte)

Cela pourrait-il également ralentir le serveur ? Je suis curieux de savoir ce que tout cela pourrait causer exactement.

3voto

Adam Points 11

Vous pouvez jouer avec les valeurs du délai d'attente dans MySQL.

Par exemple, la valeur par défaut de ' wait_timeout et interactive_timeout est de 28800 (soit 8 heures)

Vous pouvez voir sur quoi ils sont réglés en exécutant ceci :

SHOW VARIABLES LIKE 'interactive_timeout';<BR>
SHOW VARIABLES LIKE 'wait_timeout';

Si vous souhaitez réduire ces délais à, par exemple, 1 minute, un redémarrage de MySQL n'est pas nécessaire.

Exécutez-les en tant qu'utilisateur root :

SET GLOBAL interactive_timeout=60;<BR>
SET GLOBAL wait_timeout=60;

Cela garantit que toute nouvelle connexion à MySQL sera interrompue dans les 60 secondes.

puis ajouter ces lignes à /etc/my.cnf sous la section [mysqld]

interactive_timeout=60
wait_timeout=60

Bien sûr, il est plus facile de redémarrer mysql pour supprimer les connexions dormantes restantes. À partir de là, toutes les connexions seront interrompues au bout de 60 secondes.

Essayez-le et tenez-nous au courant ! !!

1voto

Andriyev Points 9238

À moins que vous ne travailliez sur un serveur vraiment limité, cela ne risque pas de ralentir quoi que ce soit. L'application qui fait cela fuira lentement la mémoire jusqu'à ce que le nombre maximum de connexions soit atteint, mais je doute qu'il s'agisse d'une telle quantité de mémoire.

Le principal problème que vous risquez de rencontrer est celui que vous avez déjà remarqué, à savoir l'utilisation maximale des connexions. La meilleure solution consiste à réparer le programme pour qu'il se nettoie lui-même. Si, pour une raison quelconque, ce n'est vraiment pas une option, vous pouvez peut-être mettre en place une limite de connexion à partir de la machine qui exécute cette application, de sorte que cette machine ne puisse pas ouvrir plus de X connexions au serveur mysql afin qu'il ne le monopolise pas (je ne sais pas quel système d'exploitation vous utilisez pour savoir si c'est possible, mais si c'est linux, ce serait une simple règle iptables).

1voto

user70002 Points 11

Oui, interactive_timeout et wait_timeout. Tant que le thread de nettoyage de mysql continue à tourner, il les nettoiera lui-même.

1voto

MarkR Points 2878

Cela ne pose aucun problème jusqu'à ce qu'il n'y ait plus de connexions et que les clients légitimes ne puissent plus se connecter.

Bien sûr, vous devez définir max_connections suffisamment bas pour ne pas manquer de mémoire ou d'espace d'adressage (MySQL utilise un thread par connexion). Vous ne devriez pas exécuter mysql sur un système 32 bits, mais si vous le faites, cela signifie que vous devez (pratiquement) avoir max_connections < 1000.

Si le serveur d'application ne parvient pas à fermer les connexions, il y a probablement des fuites de ressources de son côté également. Le fait de demander au serveur de temporiser les connexions résoudra le problème du côté de mysql, mais ne libérera probablement pas de mémoire (etc.) de l'autre côté. Le serveur d'application défectueux finira par échouer s'il n'est pas contrôlé. Il faut vraiment le réparer.

Soyez également très prudent lorsque vous fixez des délais d'attente peu élevés, car certaines applications s'attendent à ce que les connexions ne soient pas interrompues. La valeur par défaut est de 8 heures, et passer à 1 minute semble très radical.

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