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

Tomcat et TomEE Java Discussion :

[Tomcat] plantage du service...


Sujet :

Tomcat et TomEE Java

  1. #1
    Membre habitué Avatar de nikalkal
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 231
    Points : 166
    Points
    166
    Par défaut [Tomcat] plantage du service...
    Bonjour,

    j'ai un petit problème avec tomcat qui plante aléatoirement.

    Je m'explique, j'ais une appli J2EE qui est déployée sur tomcat et je navigue, je navigue, je navigue sur les flots matelots et tout va bien.
    Je redéploi mon appli aprés avoir fait des changements dans le code (par un fichier build.xml) et là: tout va bien.

    Je navigue... je refais ça marche.

    Et au bout d'un moment je refais je veux naviguer et tomcat réfléchi pendant une heure. J'ai un process tomcat5w.exe (je crois ou un truc du genre) qui utilise le proc à fond et beaucoup de mémoire. Je suis obligé de le killer et de redémarrer tomcat.

    Une précision : ce n'est pas forcément lorsque je déploie mon appli avec ant que ca se passe, ca le fait aussi quand j'utilise mon appli: je décide de me déloguer et quand je me relogue (1 fois sur 15) ça plante de la même manière.


    Perso je pense que ça vient de ma gestion des sessions car pour gérer les sessions avec un login je fais comme suit :
    Un formulaire (struts) login/password --> recherche dans la BDD --> s'il existe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                session.setAttribute("droits", theUtilisateur.getDroits());
                session.setAttribute("login", formulaire.getNom());
                session.setAttribute("password", formulaire.getMotDePasse());
    Ensuite au début de mes JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <%
    if (session.getAttribute("droits")==null) {
    <script> location.replace("<%=APPLICATION_PATH%>/vues/index.jsp"); </script>
    }
    %>
    J'ai géré ça comme ça pour pas trop me prendre la tête avec de l'authentification ldap ou autre car le projet avait pour but apprentissage de struts, spring, hibernate.

    Cette gestion des sessions pose-t-elle un problème?

    Sinon de quoi ça peut venir?

    Ps: tomcat 5.5.17

    Merci d'avance à vous, @+
    -> L’amour est à la portée de tous, mais l’amitié est l’épreuve du cœur
    -> La nature nous a donné deux oreilles et seulement une langue afin de pouvoir écouter d'avantage et parler moins
    -> Trois sortes de gens disent la vérité : les sots, les enfants et les ivrognes




  2. #2
    Membre habitué Avatar de nikalkal
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 231
    Points : 166
    Points
    166
    Par défaut
    Voila des petites précisions : le process en fait s'appelle tomcat5.exe

    Et en surveillant d'un peu plus prés ce process, j'ais remarqué qu'au départ il utilise environ 40Mo et lorsque je me logue, délogue, ou redéplio mon application, l'utilisation mémoire augmente, augmente mais ne retombe jammais.

    Le plantage se fait dés que le process utilise +de 110Mo.

    Comment se fais-ce que la mémoire n'est jammais libérée?
    -> L’amour est à la portée de tous, mais l’amitié est l’épreuve du cœur
    -> La nature nous a donné deux oreilles et seulement une langue afin de pouvoir écouter d'avantage et parler moins
    -> Trois sortes de gens disent la vérité : les sots, les enfants et les ivrognes




  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 91
    Points : 66
    Points
    66
    Par défaut
    Bonjour,

    j'ai moi aussi le même problème. Il semblerait que de manière aléatoire, certains chargements de page fassent monter l'utilisation du process et que jamais cela ne redescende.
    Cependant, en ce qui me concerne, mon appli le faisait très régulièrement jusqu'à ce que je m'aperçoive qu'une connexion à la base n'était pas fermé
    Depuis j'ai beaucoup moins de problèmes, mais le phénomène continue de se produire une fois par mois environ dans un cas d'utilisation réel (des personnes utilisant l'appli toute la journée depuis des postes clients).

    Pour commencer je te dirais donc bien de vérifier que toutes tes connexions à la BD sont bien fermées (ainsi que les statement, resultset...) et si possible dans des finally.

    Pour le reste j'attends moi aussi quelques eclaircissements
    Il faut être économe de son mépris en raison du grand nombre de nécessiteux (Chateaubriand)

  4. #4
    Membre habitué Avatar de nikalkal
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 231
    Points : 166
    Points
    166
    Par défaut
    Ok merci.

    Le problème c'est que j'utilise le mode transactionnel de spring couplé à hibernate pour gérer mes transaction en base de données. Et là ça se complique

    Faut que je vois du cotés de spring et d'hibernate alors mais voila la misère à mon avis pour trouver ça.

    Si quelqu'un a des infos je suis preneur!

    @+
    -> L’amour est à la portée de tous, mais l’amitié est l’épreuve du cœur
    -> La nature nous a donné deux oreilles et seulement une langue afin de pouvoir écouter d'avantage et parler moins
    -> Trois sortes de gens disent la vérité : les sots, les enfants et les ivrognes




  5. #5
    Membre habitué Avatar de nikalkal
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 231
    Points : 166
    Points
    166
    Par défaut
    Si ca peut aider voiçi des précisions :
    ma conf hibernate :
    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
    25
    26
    27
    28
    29
    30
    31
    32
     
        <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <!-- Déclaration des fichiers de mapping -->
            <property name="mappingResources">
                <list>
                    <value>fr/gestentrep2/utilisateurs/pojos/Utilisateur.hbm.xml</value>
                    <value>fr/gestentrep2/voitures/pojos/Voiture.hbm.xml</value>
                    <value>fr/gestentrep2/voitures/pojos/Entretient.hbm.xml</value>
                    <value>fr/gestentrep2/voitures/pojos/Facture.hbm.xml</value>
                    <value>fr/gestentrep2/voitures/pojos/UtilisationVoiture.hbm.xml</value>
                </list>
            </property>        
            <!-- Déclaration des paramètres liés à hibernate -->
            <property name="hibernateProperties">
                <props>
            <prop key="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</prop>
            <prop key="hibernate.connection.url">jdbc:mysql://localhost/gestentrep2</prop>
            <prop key="hibernate.connection.username">root</prop>
            <prop key="hibernate.connection.password"></prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <!--  <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>-->
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
                    <prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
                </props>
            </property>
        </bean>
     
        <bean id="myTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory"><ref local="mySessionFactory"/></property>
        </bean>
    Mes déclarations de transactions dans spring :
    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
    25
    26
    27
    28
    29
    30
    31
     
        <bean id="myUserTransactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
            <property name="transactionManager" ref="myTransactionManager"/>
            <property name="transactionAttributeSource">
                <value>fr.gestentrep2.utilisateurs.services.ISpringUserService.*=PROPAGATION_REQUIRED</value>
            </property>
        </bean>
     
        <bean id="myHibernateUserService" class="fr.gestentrep2.utilisateurs.services.hibernate.HibernateUserServiceImpl">
            <property name="sessionFactory"><ref local="mySessionFactory"/></property>        
        </bean>
     
        <bean id="myHibernateVoitureService" class="fr.gestentrep2.voitures.services.hibernate.HibernateVoitureServiceImpl">
            <property name="sessionFactory"><ref local="mySessionFactory"/></property>        
        </bean>
     
        <bean id="mySpringUserServicesImpl" class="fr.gestentrep2.utilisateurs.services.spring.SpringUserServicesImpl">
            <property name="serviceDAO" ref="myHibernateUserService"/>
        </bean>
     
        <bean id="myUserService" class="org.springframework.aop.framework.ProxyFactoryBean">
            <property name="proxyInterfaces">
                <value>fr.gestentrep2.utilisateurs.services.ISpringUserService</value>
            </property>
            <property name="interceptorNames">
                <list>
                    <value>myUserTransactionInterceptor</value>
                    <value>mySpringUserServicesImpl</value>
                </list>
            </property>
        </bean>
    Et une méthode d'accès à la base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            Session session = sessionFactory.getCurrentSession();
            Utilisateur theUtilisateur = (Utilisateur) session.createQuery("from Utilisateur where use_login = '" + exLogin + "' and use_password = '" + exPassword + "'").list().get(0);
            theUtilisateur.setLogin(login);
            theUtilisateur.setPassword(password);
            theUtilisateur.setNom(nom);
            theUtilisateur.setNumeroDeTel(numeroDeTel);
            theUtilisateur.setDivers(divers);
            session.save(theUtilisateur);
    Help please
    -> L’amour est à la portée de tous, mais l’amitié est l’épreuve du cœur
    -> La nature nous a donné deux oreilles et seulement une langue afin de pouvoir écouter d'avantage et parler moins
    -> Trois sortes de gens disent la vérité : les sots, les enfants et les ivrognes




  6. #6
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Salut,

    Une optimization serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Utilisateur theUtilisateur = (Utilisateur) session.createQuery("from Utilisateur where use_login = ? and use_password = ? ").setString(0, exLogin).setString(1, exPassword).uniqueResult();
    Je pense qu'Hibernate pourra optimiser cela, car sinon, à chaque fois il génère une requête, alors qu'ici il peut utiliser un preparedstatement.

    Sinon, ton problème me parrait être lié à une fuite mémoire; Il faut profiler ton application et détecter les eventuelles fuites mémoires ! Ton tomcat plante si il n'a plus de mémoire; par défaut tomcat se lance avec un seuil de mémoire à utiliser, mais si il n'arrive pas à garbage collecter tes objets, il va faire un gros OUIN

    A+
    K

  7. #7
    Membre habitué Avatar de nikalkal
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 231
    Points : 166
    Points
    166
    Par défaut
    Merci pour cette réponse, je ne pourrai pas essayer avant la fin de la semaine mais je donnerais un retour lorsque je l'aurais fais.
    @+
    -> L’amour est à la portée de tous, mais l’amitié est l’épreuve du cœur
    -> La nature nous a donné deux oreilles et seulement une langue afin de pouvoir écouter d'avantage et parler moins
    -> Trois sortes de gens disent la vérité : les sots, les enfants et les ivrognes




Discussions similaires

  1. [Tomcat]Projet WEB Services
    Par rad_hass dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 03/02/2006, 14h49
  2. [Tomcat] Plantage d'une appli sous tomcat
    Par spk4ever dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 22/12/2005, 10h18
  3. Plantage de service sous Windows 2003 server
    Par akasim73 dans le forum MFC
    Réponses: 2
    Dernier message: 10/11/2005, 15h49
  4. [Tomcat 5] Le service démarre et s'arrête
    Par cicko dans le forum Tomcat et TomEE
    Réponses: 16
    Dernier message: 12/10/2005, 17h00
  5. [CVS]: plantage du service sous win32
    Par sleepy2002 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 01/06/2004, 10h09

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