|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre habitué
![]() Inscription : mai 2008 Messages : 285 ![]() |
Bonjour à tous,
J'utilise JDBC, pour me connecter a MYSQL. Mais seulement voilà, J'ai au bout de 8 heures d'ouverture de connection un timeout qui me provoque une erreur: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 45 496 828 milliseconds ago. The last packet sent successfully to the server was 1 milliseconds ago. le Wait Time out est configuré: wait timeout : 28 800 Equivalent de 8heures. Grosso-modo, j'ouvre la connexion et je ne la referme jamais. Car si je la ferme et la ré-ouvre a chaque requête, j'ai l'erreur: "too many connections" Voici mon code: JdbcConnector Code :
Code :
|
||||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : août 2004 Messages : 8 227 ![]() |
Utiliser un pool de connexions (tel que DBCP) et relâcher systématiquement les connexion en faisant un close des éléments (connexion+resultset+statement) dans le bloc finally correspondant au try/catch de tes opérations SQL.
__________________
Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something. |
|
|
00
|
|
|
#3 | ||||
|
Membre habitué
![]() Inscription : mai 2008 Messages : 285 ![]() |
Merci Sinok pour la réponse,
J'ai télécharger les bibliothèque et testé le code d'exemple: http://svn.apache.org/viewvc/commons...va?view=markup En modifiant la classe de l'exemple, ça me donne: Code :
Code :
Merci encore |
||||
|
|
00
|
|
|
#4 |
![]() ![]() |
C'est que vous vous contentez d'en ouvrir de nouvelles sas fermer les connexions.
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() "Votre génitrice tute des pédoncules au pandémonium" (le conjurateur, 1973) |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Inscription : mai 2008 Messages : 285 ![]() |
Merci Tchize,
En faite si je ne ferme jamais les connections je n'ai pas l'erreur "too many connections" mais un timeout sur l'ouverture de connexion. Par contre si je ferme sur chaque requête la connexion, sur certaines pages j'ai l'erreur "too many connections". Sur une seule action, je peux effectuer une quinzaine de requêtes. Je pense que la réponse de Sinok est la solution, mais je n'arrive pas faire fonctionner l'exemple de la bibliothèque de dbcp. Et je ne comprend pas trop le principe et comment l'appliqué a mon code sur le premier post? En vous remerciant
|
|
|
00
|
|
|
#6 |
![]() ![]() |
Non, justement, si vous avez cette erreur c'est justement parceque certaines connexions restent ouvertes.
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() "Votre génitrice tute des pédoncules au pandémonium" (le conjurateur, 1973) |
|
|
00
|
|
|
#7 |
|
Membre habitué
![]() Inscription : mai 2008 Messages : 285 ![]() |
Actuellement, le code que j'utilise n'a aucune fermeture de connexion.
Et j'ai une condition Si connexion ouverte, on ne la ré-ouvre pas. Ce code provoque un timeout au bout de 8 heures. Et si je met la clause finally sur chaque requête -> fermeture de connexion , j'ai l'erreur "too many connections" De plus le temps de chargement est multiplié par 4 voir plus. Donc l'objectif n'est pas de faire ralentir le process. Si tu as un code d'exemple ou je peux m'inspirer. Encore merci |
|
|
00
|
|
|
#8 | ||
![]() ![]() Inscription : août 2004 Messages : 8 227 ![]() |
exemple propre de gestion des connexions JDBC
Code :
__________________
Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something. |
||
|
|
00
|
|
|
#9 | ||||
|
Membre habitué
![]() Inscription : mai 2008 Messages : 285 ![]() |
Merci Sinok,
J'ai donc appliqué la clause finaly La classe MembreDao: Code :
Y a t'il une méthode plus fastidieuse d'écrire une seule fois, pour toutes les requêtes : Code :
Merci EDIT> Je préfère attendre des réponses avant de modifier les 45 classes DAO. |
||||
|
|
00
|
|
|
#10 |
![]() ![]() |
LE pool permet le réutilisation des connexion (ça améliore les performance) plutot que de faire une nouvelle connexion à chaque fois.
Ensuite, dans ton code, les createStatement pour ne rien en faire, ça ne sert à rien.
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() "Votre génitrice tute des pédoncules au pandémonium" (le conjurateur, 1973) |
|
|
00
|
|
|
#11 |
|
Membre habitué
![]() Inscription : mai 2008 Messages : 285 ![]() |
Ok, je vais le virer le createStatement.
Pour le pool de connexion, je ne trouve que des exemples avec une datasource. Je ne veux pas de datasource, car je n'utilise qu'une seule application en JSE. Comment intégrer le pool au DriverManager? Merci |
|
|
00
|
|
|
#12 |
![]() ![]() |
La datasource, c'est le pool. Tu ne peux pas avoir le pool sans la datasource, c'est la même chose (enfin presque, une datasource n'est pas obligée de faire du pooling)
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() "Votre génitrice tute des pédoncules au pandémonium" (le conjurateur, 1973) |
|
|
00
|
|
|
#13 | ||||
|
Membre habitué
![]() Inscription : mai 2008 Messages : 285 ![]() |
Merci tchize_
![]() J'ai voulu faire un test et j'ai obtenu ceci: Code :
J'ai l'erreur dans la console: Code :
Ce code vient des exemples sur dbcp : http://svn.apache.org/viewvc/commons...143885&view=co Merci pour votre aide |
||||
|
|
00
|
|
|
#14 |
![]() ![]() |
utilise new PoolableConnectionFactory(connectionFactory) plutot que la version avec plein de paramètre. Je pense qu'il ne digère pas tes null
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() "Votre génitrice tute des pédoncules au pandémonium" (le conjurateur, 1973) |
|
|
00
|
|
|
#15 | ||
|
Membre habitué
![]() Inscription : mai 2008 Messages : 285 ![]() |
Oui c'est ce que je voulais mettre, mais ce constructeur a un seul argument, n'existe pas.
Voici la classe PoolableConnectionFactory: Code :
|
||
|
|
00
|
|
|
#16 | ||
|
Membre habitué
![]() Inscription : mai 2008 Messages : 285 ![]() |
Bonjour, je pense avoir trouvé la solution:
Voici mon code qui fonctionne: Code :
J'ai cependant quelques questions: 1- A quoi correspond le min pool size et le max pool size? Valeur par défaut 30 et 70. 2- Le destructeur protected void finalize(), n'ai jamais appelé est il utile? 3- La méthode printDriverStats() donne le nombre de connexions? 4- La méthode getNumLockedProcesses(), je ne vois pas a quoi elle sert? Merci EDIT> Je viens de remarquer que le fait d'avoir fermé les requêtes, le temps moyen d'affichage d'une page est multiplié par 2 (surtout lorsque la base est distante). |
||
|
|
00
|
|
|
#17 | ||
![]() ![]() Inscription : août 2004 Messages : 8 227 ![]() |
1 - Le min pool size est le nombre de connexions instanciées par défaut, le max étant le nombre maximal de connexions instanciées en parallèle dans le pool, au delà du max, le getConnection ne fournira la connexion qu'une fois qu'un des objets Connection sera à nouveau disponible (le but est d'éviter qu'il y ait trop de connexions simultanées au niveau du SGBD).
2 - Je ne vois pas de finalize dans ton code, de quel finalize parles tu?... De plus ce n'est pas un destructeur au sens propre du terme, et quoi qu'il en soit tu n'as en java aucune assurance quant au moment de son exécution, vu que c'est le GC qui gère ça. 3- bah suffit de lire le code de la méthode... Code :
4 - Récupère le nombre de processes au statut locked dans ta base mysql.
__________________
Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something. |
||
|
|
00
|
|
|
#18 | |
![]() ![]() |
Citation:
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() "Votre génitrice tute des pédoncules au pandémonium" (le conjurateur, 1973) |
|
|
|
00
|
|
|
#19 |
|
Membre habitué
![]() Inscription : mai 2008 Messages : 285 ![]() |
Merci a tous les deux
![]() Voici mes tests: Temps de chargement des pages (changement de vue) - la bdd en local: moins d'une seconde - a distance sur un serveur (PC- Windows 7) wamp avec fermeture systématique des connections 4 secondes - a distance sur un serveur (PC- Windows 7) wamp sans fermeture systématique des connections 2 secondes -Test bdd distant sur serveur linux chez OVH: (en cours) Test temps de connection supérieur à 8 heures: -sans fermeture connections : timeout au bout de 8 heures -avec fermeture connections : test en cours Je vous tiens informé dès que j'aurais fini tous les tests. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com