Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre à l'essai
    Homme Profil pro
    Etudiant EPITECH 5e année
    Inscrit en
    octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Etudiant EPITECH 5e année

    Informations forums :
    Inscription : octobre 2014
    Messages : 28
    Points : 23
    Points
    23

    Par défaut Erreur SQL : "Too many connections"

    Bonjour,

    Lors de mes tests, il m'arrive souvent de laisser tourner mon application serveur assez longtemps, c'est à dire que je ne la redémarre pas en faisant des modifications côté client. Or, j'ai régulièrement des erreurs de ce type, qui me plantent l'application :

    Nom : Sql too many connections.PNG
Affichages : 74
Taille : 2,9 Ko

    Lorsque que je regarde les connexions tcp ouvertes sur mon pc, je constate qu'il y en a énormément entre mon application et le démon sql :
    Nom : Connexion réseau mysql.PNG
Affichages : 79
Taille : 80,8 Ko
    Nom : Connexions reseau serveur.PNG
Affichages : 75
Taille : 85,5 Ko

    N'y aurait il pas un oubli de fermeture de socket au niveau de QxOrm ?
    (désolé pour les grandes captures d'écran)

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    avril 2010
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2010
    Messages : 478
    Points : 3 953
    Points
    3 953

    Par défaut



    C'est bizarre !
    Normalement, le module QxService utilise une connexion par thread au niveau de ton serveur.
    Combien de threads as-tu défini par la méthode qx::service::QxConnect::getSingleton()->setThreadCount(XXX) ?

    Ou peut-être que tu utilises ton propre pool de connexions ?

    Sinon, tu peux aussi fermer automatiquement la connexion à la BDD après exécution de chaque requête.
    Dans ta classe de service héritée de qx::service::IxService (je sais que tu en as créé une pour gérer un mécanisme d'authentification), tu peux surcharger la méthode virtual void onAfterProcess() (ou bien mettre le code dans le destructeur du service) pour fermer la connexion à la BDD, quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    virtual void onAfterProcess()
    {
       // Get the connection for the current thread and close it
       QSqlDatabase db = qx::QxSqlDatabase::getDatabase();
       db.close();
    }
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Etudiant EPITECH 5e année
    Inscrit en
    octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Etudiant EPITECH 5e année

    Informations forums :
    Inscription : octobre 2014
    Messages : 28
    Points : 23
    Points
    23

    Par défaut

    J'ai défini 200 threads pour l'instant. Mais cette valeur est bien le nombre de clients simultanés connectés à un serveur via les services n'est ce pas ?
    Le problème ici est bel et bien le nombre de connexions entre le serveur et la base de données.

    Je vais essayer ta méthode. Je te tiens au courant.

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    avril 2010
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2010
    Messages : 478
    Points : 3 953
    Points
    3 953

    Par défaut

    J'ai défini 200 threads pour l'instant.
    Ça me parait énorme 200 : même si tu as 200 clients qui se connectent exactement au même moment à ton serveur et que tu as mis une valeur à 50 par exemple, il y a un mécanisme de file d'attente.
    Et comme une requête en général est extrêmement rapide, pour l'utilisateur final, c'est dans la plupart des cas complètement transparent.

    Mettre 200 signifie qu'au bout d'un moment, tu auras effectivement 200 connexions ouvertes à ta BDD, car les threads disponibles sont utilisés au fur et à mesure des requêtes clientes.
    Donc il faut vérifier que ta BDD supporte 200 connexions simultanées (c'est peut-être un paramétrage de ta BDD).
    Ou alors baisse ce chiffre et mets une valeur à 50 par exemple.
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/10/2012, 11h14
  2. Erreur au lancement de mysqld : Too many connection
    Par Fonzy17 dans le forum Outils
    Réponses: 12
    Dernier message: 20/04/2006, 16h48
  3. [JonAs]JOnAS SQLException "Too Many Connections"
    Par uron86 dans le forum JOnAS
    Réponses: 4
    Dernier message: 23/06/2005, 09h26
  4. Pgsql : erreur de connexion 'too many clients ...'
    Par petitmoosse dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 21/08/2003, 14h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo