IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Hibernate Java Discussion :

Acces à la base bloquer


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut Acces à la base bloquer
    Bonjour,

    c'est un problème que j'ai depuis au moins 2 mois sur une application sur TOMCAT. le serveur tourne et au bout d'un temps X (entre 10 minutes et 10 jours) l'accès à la base (Mysql 5.0) via Hibernate (3.2.6) est bloqué. Pas de log d'erreur.
    Donc j'ai ajouté des loggers et j'ai finit par trouver que le code bloquait sur les fonction "list" et sur tout les accès vers la base en général.
    En utilisant Your kit Profiler j'ai pus trouver la pile d'appel et surtout ou les accés bloquaient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    http-0.0.0.0-80-7 [BLOCKED] CPU time: 0:00
    ch.qos.logback.classic.Logger.callAppenders(LoggingEvent)
    ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(String, Marker, Level, String, Object[], Throwable)
    ch.qos.logback.classic.Logger.filterAndLog(String, Marker, Level, String, Object[], Throwable)
    ch.qos.logback.classic.Logger.log(Marker, String, int, String, Throwable)
    org.apache.commons.logging.impl.SLF4JLocationAwareLog.debug(Object)
    org.hibernate.jdbc.AbstractBatcher.logOpenPreparedStatement()
    org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(String, boolean, ScrollMode)
    org.hibernate.loader.Loader.prepareQueryStatement(QueryParameters, boolean, SessionImplementor)
    org.hibernate.loader.Loader.doQuery(SessionImplementor, QueryParameters, boolean)
    org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(SessionImplementor, QueryParameters, boolean)
    org.hibernate.loader.Loader.doList(SessionImplementor, QueryParameters)
    org.hibernate.loader.Loader.listIgnoreQueryCache(SessionImplementor, QueryParameters)
    org.hibernate.loader.Loader.list(SessionImplementor, QueryParameters, Set, Type[])
    org.hibernate.loader.criteria.CriteriaLoader.list(SessionImplementor)
    org.hibernate.impl.SessionImpl.list(CriteriaImpl)
    org.hibernate.impl.CriteriaImpl.list()
    ...connector.hibernate.HibernateUtil.list(Criteria)
    ...connector.user.UserHibernateFactory.exist(String, String)
    ...manager.DomainUserManagerImpl.authenticateUser(String, String, String, boolean)
    ...domain.Authenticate.<init>(String, String, String, boolean)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ServletRequest, ServletResponse)
    ...servlet.filter.SetCharacterEncodingFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
    java.lang.Thread.run()
    Voila c'est donc bloque sur ch.qos.logback.classic.Logger.callAppenders.
    S'il vous plait, Quelqu'un a t'il une vague idée sur le sujet, je prend toutes les suggestions.
    J'ai plusieurs piste mais rien jusque là n'a pus contrecarrer ce bug et je ne parviens pas à le provoquer.

  2. #2
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    Si les accès sont bloqués, donc en attente de la BDD, il devrait bien y avoir un timeout sur la gestion des transactions et donc un message d'erreur. Sinon, rien dans les logs MySQL ?

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    visiblement, c'est ce ch.qos.logback qui foire, je sais pas ce que c'est que ce truc, mais je propose de le virer pour tester?

  4. #4
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    Merci beaucoup pour vos suggestions.
    il a 3 jours J'ai téléchargé les sources de logback et supprimé le code contenu dans la méthode callAppender.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ch.qos.logback.classic.Logger.callAppenders
    Malheureusement cela supprime la log d'hibernate.
    J'ai trouvé un obscure bug de DEADLOCK sur multicore qui pouvait exister sur cette librairie. (pour info le BUG pour ma part c'est produit en utilisant la 0.9.8 et j'ai recodé la 0.9.9)
    http://bugzilla.qos.ch/show_bug.cgi?id=112.
    Le problème est que je ne suis pas parvenu a reproduire ce BUG. J'ai par contre "réussi" à trouver un autre BUG sur CriteriaLoader.list avec un BUG déjà plus connu sur C3P0 qui fait APPARENT DEADLOCK. Ceci dit ce bug n'est pas apparut lors de l'exploitation du serveur mais seulement dans les tests de stress système et il a disparu avec utilisant la config de ce lien http://www.mchange.com/projects/c3p0/index.html par contre en utilisant celle de la doc d'hibernate http://www.hibernate.org/214.html le deadlock ce produit.
    Pour le moment, les modifications ont été effectué et le BUG n'est pas réapparu. pas de blocage de l'accès.
    Pour l'instant je demeure dans les hypothèses.

    J'étais tellement persuadé que le problème venait d'un code Java que j'ai même pas pensé à regarder la log de Mysql ce qui est un oubli grossier. Cependant les Accés à Mysql (Via Mysql Browser) fonctionnaient et fonctionne toujours très bien que l'accès Java soit bloqué.

    Voila je ne suis pas sur à 100% d'avoir corrigé mon problème mais j'espère que ce message aidera quelqu'un d'autre à corriger les siens.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 64
    Par défaut
    Une idée qui m'est venu comme ça :
    Ça ne viendrait pas d'un problème d'espace mémoire....

  6. #6
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    Tu veux dire un problème de type "out of memory" ?
    En tous cas il n y en pas de trace de ce type. Je me suis aussi posé la question sur le la limitation du nombre de Thread mais d'après YJP la mémoire utilisée est faible et le nombre de Thread est inférieure à 60. Ceci dit l'application a déjà plantée sans que j'ai une quelconque information via YJP (YourKit Java Profiler) ou via la log de base donc rien n'est à exclure.

Discussions similaires

  1. Bloquer l'accès à une base avant sa restauration?
    Par CleeM dans le forum Administration
    Réponses: 0
    Dernier message: 26/09/2012, 10h34
  2. [Wamp] Bloquer l'accés à des bases de données
    Par Cvbdev dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 01/05/2010, 19h49
  3. Accès à la base de registre windows à distance
    Par xavame dans le forum Sécurité
    Réponses: 4
    Dernier message: 13/07/2005, 15h23
  4. [Dev-C++] Accès à une base MySQL
    Par Beetlejuice dans le forum Dev-C++
    Réponses: 8
    Dernier message: 08/05/2003, 13h17
  5. [sgbd] Accès au base de données en Perl
    Par totox17 dans le forum SGBD
    Réponses: 3
    Dernier message: 24/02/2003, 16h05

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