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 :

Contrôler OutOfMemory Tomcat 6


Sujet :

Tomcat et TomEE Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Contrôler OutOfMemory Tomcat 6
    Bonjour,

    Comment puis-je détecter depuis mon application si l'instance Tomcat fait de l'OutOfMemory (OOM) ou pas ?

    Actuellement, je monitors mon applications en cherchant un mot clé dans une page.
    Cette page réalise plusieurs contrôles internes et si l'application tourne bien, elle renvoie un statut valide. Et inversement en cas de problème.

    Et il arrive que le Tomcat tombe en OOM (Java Heap full) - application down mais la page de monitoring fonctionne toujours -.
    Pour pouvoir optimiser cette page de monitoring, je souhaiterai savoir si il possible de vérifier l'état de la mémoire depuis mon appli?


    Dans un premier temps, j'ai essayé cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    double totalMem = Runtime.getRuntime().totalMemory();
    double maxMem = Runtime.getRuntime().maxMemory();
    double marge = 0.995; 
     
    if(totalMem > ( maxMem * marge )){
    	err = "Full memory";
    }else{
    	err = "RAS";
    }

    Et après test, c'est pas top. Certain moment, Tomcat utilise 100% de la mémoire mais il ne crache pas d'OOM et l'application fonctionne bien.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    un OOM ne veux pas dire que tomcat arrêt de fonctionner. Dans la majorité des cas, le OOM est du à une requete gourmande, donc c'est elle qui renvoie un OOM. Une fois la requête avortée, la mémoire est libérée et les autres requêtes continuent sans soucis. Par contre, si pendant cette requêt, quelqu'un essaie par exemple de charger une nouvelle classe dans le classloader et que ce chargement lance un OOM, cette classe sera définitivement inaccessible.

    Ce qu'il te faut faire

    1) identifier la cause de tes OOM pour les éviter, soit en augmentant la mémoire si c'est justifier, soit en adaptant tes algos pour être moins gourmands.

    2) Si tu as des OOM et qu'il font "tomber" ton tomcat, surveiller les symptomes et non la cause. Même 10 secondes après le OOM tu peux avoir 50% de mémoire libérér car suite au OOM un thread / une requête est terminée / morte et aura libéré ses ressources.


    Concernant le test de la mémoire disponible, utilise les MxBean plutot que runtime, tu y aura une vue plus détaillées.

    http://javasearch.developpez.com/j2s...oryMXBean.html

    enfin: totalmemory, c'est la mémoire occupée par la JVM, il te faut comparer à freememory pour savoir combien est réellement occupé par des objets.

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    En fait, j'obtiens le OOM quand j'ai un grand nombre d'utilisateur sur l'application. J'ai augmenté au max la mémoire alloué pour Tomcat mais des OOM surgissent parfois (mais moins).
    -> Je vais regarder ce que je peux optimiser dans le code.

    Et je ne connaissais pas MxBean , merci de l'info.

    Je mets la discussion en Résolu pour ne pas polluer le forum.
    Je vais chercher de mon coté.

    Merci #tchize_ pour ces détails, ça m'aide énormément. J'ai une meilleure vision sur le sujet maintenant.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    si par un grand nombre tu entends, par exemple, que ça a tendance à declencher un OOM quand tu serts 200 utilisateurs simultanément, tu peux aussi regarder à réduire le nombre de threads servant les requêtes tomcat. Moins de thread = moins de demandes simultanées de mémoire = moins de risques de OOM, mais aussi un risque de réactivité plus faible (mais pas toujours).

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

Discussions similaires

  1. Tomcat sous netbeans -> OK, Tomcat en service -> OutOfMemory
    Par Delphine.H dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 25/05/2011, 11h44
  2. Docs, Tutoriels et astuces Tomcat et JBoss (US)
    Par Ricky81 dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 13/03/2009, 21h00
  3. Réponses: 1
    Dernier message: 25/05/2007, 15h49
  4. Context sous Tomcat
    Par EL MANSOURI dans le forum JBuilder
    Réponses: 5
    Dernier message: 28/01/2003, 11h26
  5. Tomcat + Apache-SOAP
    Par lucho31 dans le forum Services Web
    Réponses: 3
    Dernier message: 17/10/2002, 09h55

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