CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Probleme mysql : Connection timed out

[jack-sparrow]
[jack-sparrow]
Niveau 7
25 mai 2013 à 21:11:19

Bonjour !

Je fais tourner un programme java avec environ 1000 threads qui font pas mal d'insertions chacun dans la BDD. (J'ai un gros serveur derrière : 16Go de RAM, SSD)

Ça a pas forcément l'air de galérer mais au bout de 4mn environ j'obtiens l'erreur suivante :

    • BEGIN NESTED EXCEPTION **

java.net.ConnectException
MESSAGE: Connection timed out

STACKTRACE:

java.net.ConnectException: Connection timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(Abstrac
tPlainSocketImpl.java:327)

at java.net.AbstractPlainSocketImpl.connectToAddress(
AbstractPlainSocketImpl.java:193)

at java.net.AbstractPlainSocketImpl.connect(AbstractP
lainSocketImpl.java:180)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.j
ava:384)

at java.net.Socket.connect(Socket.java:546)
at java.net.Socket.connect(Socket.java:495)
at java.net.Socket.<init>(Socket.java:392)
at java.net.Socket.<init>(Socket.java:235)
at com.mysql.jdbc.StandardSocketFactory.connect(Stand
ardSocketFactory.java:256)

at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:271)
at com.mysql.jdbc.Connection.createNewIO(Connection.j
ava:2771)

at com.mysql.jdbc.Connection.<init>(Connection.java:1
555)

at com.mysql.jdbc.NonRegisteringDriver.connect(NonReg
isteringDriver.java:285)

at java.sql.DriverManager.getConnection(DriverManager
.java:620)

at java.sql.DriverManager.getConnection(DriverManager
.java:200)

at org.apache.commons.dbcp.DriverManagerConnectionFac
tory.createConnection(DriverManagerConnectionFacto
ry.java:75)

at bdd.Bdd.Connection(Bdd.java:78)
at webBot.WebBot.InitBot(WebBot.java:103)
at webBot.WebBot.call(WebBot.java:191)
at webBot.WebBot.call(WebBot.java:1)
at java.util.concurrent.FutureTask$Sync.innerRun(Futu
reTask.java:334)

at java.util.concurrent.FutureTask.run(FutureTask.jav
a:166)

at java.util.concurrent.Executors$RunnableAdapter.cal
l(Executors.java:471)

at java.util.concurrent.FutureTask$Sync.innerRun(Futu
reTask.java:334)

at java.util.concurrent.FutureTask.run(FutureTask.jav
a:166)

at java.util.concurrent.ThreadPoolExecutor.runWorker(
ThreadPoolExecutor.java:1110)

at java.util.concurrent.ThreadPoolExecutor$Worker.run
(ThreadPoolExecutor.java:603)

at java.lang.Thread.run(Thread.java:636)

    • END NESTED EXCEPTION **

J'ai déjà essayé de mettre un wait_timeout = 86400 dans /etc/mysql/my.cnf mais cela n'a rien changé ! :/

D'où est ce que cela peut venir d'après vous ?

Merci d'avance et bonne soirée !

Silvermo
Silvermo
Niveau 26
25 mai 2013 à 21:56:07

Et t'as essayé avec interactive_timeout ?

[jack-sparrow]
[jack-sparrow]
Niveau 7
25 mai 2013 à 22:41:10

Ca à l'air de bien fonctionner ! :)
Je ne connaissais pas du tout.

J'aurais bien aimé connaître la valeur par défaut. Comment peut on consulter la valeur de ces variables ? et a quoi servait le interactive_timeout ?

[jack-sparrow]
[jack-sparrow]
Niveau 7
26 mai 2013 à 16:52:07

Oups je m'excuse mais en fait ça n'a pas fonctionné, je pense que je l'avais lancé avec moins de threads et ça n'a donc pas provoqué d'erreur.

Une autre idée ? :)

Silvermo
Silvermo
Niveau 26
26 mai 2013 à 17:15:06

et sinon après avoir appliqué les modifications pour le timeout tu as bien redémarré mysql ?

si c'est pas un problème de timeout, c'est peut-être un effort de bord du nombre de connections simultanées, tu devrais vérifier que tu libères bien toutes les ressources.. et vérifier combien il peut y avoir de demandes de connections simultanées selon comment tu as programmé tes threads (zones interruptibles ou pas), et selon le nombre de connections max autorisées par ton instance mysql

[jack-sparrow]
[jack-sparrow]
Niveau 7
27 mai 2013 à 00:06:49

Oui j'ai bien effectué le restart de mysql. :)

J'ai fixé le nombre de connexions à 30000. (C'est beaucoup mais comme ça j'ai de la marge)

Et je pense libérer toutes les ressources au fur et à mesure. :/

godrik
godrik
Niveau 30
27 mai 2013 à 01:47:36

Certainement que les connexions ne sont pas ferme. Regarde dans les logs du serveur de base de donnee si il reporte quoi que ce soit la dessus. netstat doit pouvoir te dire ca. Aussi pense aussi qu'il n'y a que 2^16 port TCP differents disponibles; fait attention a ne pas les epuiser cote client.

godrik
godrik
Niveau 30
27 mai 2013 à 01:56:23

aussi, tu as 1000 threads qui tourne sur ta machine, mais j'imagine qu'il n'y a pas autant de core physique, probablement pas plus de 16. Ca veut dire que tu as plus de 50 threads par core physique qui tourne. Tu pourrais avoir de la famine sur certain threads qui entrainent un timeout quelque part.

Aussi, avec 1000 client actifs simultanement tu pourrais avoir un probleme du cote mysql. Si tu as 1000 threads cote mysql, tu va arriver avec les memes types de problemes voir pire, tu pourrais thrasher le systeme de fichier et rendre la machine non-repondante.

Regardes la tete de l'uptime sur tes machines pour voir ce qu'il se passe. De facon generale, avoir plus de 1 threads par core actif sur une machine rendant la machine instable.

Silvermo
Silvermo
Niveau 26
27 mai 2013 à 01:59:40

je plussoie, ce sont des choses à vérifier aussi :)

[jack-sparrow]
[jack-sparrow]
Niveau 7
28 mai 2013 à 01:19:41

Bonsoir !

Je suis toujours en train de chercher le problème et je pense être sur une piste. J'ai l'impression de fermer les connexions ouvertes, tout indique que c'est bien le cas, mais j'ai pourtant l'impression que ça vient de là...

D'après ce lien :
http://alvinalexander.com/blog/post/mysql/how-show-open-database-connections-mysql

En faisant cette commande on obtient un petit tableau comme celui-ci :

+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Aborted_connects | 0 |
| Connections | 8 |
| Max_used_connections | 4 |
| Ssl_client_connects | 0 |
| Ssl_connect_renegotiates | 0 |
| Ssl_finished_connects | 0 |
| Threads_connected | 4 |
+--------------------------+-------+

Personnelement, ma ligne Connections est à 150000 et augmente quand je lance mon programme.
Est-ce un compteur des connexions "non fermées" ? Cela voudrait donc dire que mon programme ne ferme pas les connexions même si j'en ai l'impression ? Ou est ce juste un compteur du nombre de connexions totales qui ont été effectuées ?

[jack-sparrow]
[jack-sparrow]
Niveau 7
28 mai 2013 à 02:11:02

J'ai trouvé ma réponse : il s'agit du total de tentatives de connexion.

Et apparemment comme j'utilise un connctionpool y'a qu'une seule connection ouverte.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment