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

Format d'échange (XML, JSON...) Java Discussion :

charge serveur [JDOM]


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité de passage

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 995
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 995
    Par défaut charge serveur
    Bonjour,

    Depuis peu, j'ai mis en place un système de génération de XML sur un serveur qui est soumis à une forte charge (des dizaines de milliers de XML générés par jour). Les XML générés font de l'ordre de la centaine de Ko. Est-il possible que le problème vienne de JDOM ? Quelqu'un a-t-il déjà eu un problème similaire ? Est-ce que je peux régler ce problème en utilisant par exemple le DOM inclus dans la bibliothèque standard ?

    En fait, en y réflechissant, c'est clairement la source du problème. Les XML étant très volumineux et très nombreux, les serveurs génèrent une pléthore d'objets (Element, Attribut, String...) qui encombrent le heap space, ce qui finit par faire tomber le serveur.

    Par contre, je ne vois pas quelle solution apporter, à part générer le XML par un moyen unsafe, genre écrire les balises. Quelqu'un connait une alternative ?

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    ... Il faudrait aussi nous dire quel problème tu as.

    Sinon, pour information, 80 000 par jour par exemple, ça fait moins d'un par seconde. Je n'appelle pas ça une forte charge. J'appelle ça "quelque chose qu'il fait tout le temps et qui n'est pas du tout exceptionnel."

    Citation Envoyé par Traroth2 Voir le message
    Par contre, je ne vois pas quelle solution apporter, à part générer le XML par un moyen unsafe, genre écrire les balises. Quelqu'un connait une alternative ?
    Une approche SAX est également consommatrice de ressource et mémoire. Mais beaucoup moins que DOM.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    S'il y a une fuite de mémoire, je pense pas qu'elle vienne de JDom.
    Tu dois garder une référence à des objets qui empeche le Garbage Collector de libérer la mémoire.
    Un HeapDump te permettrait de voir le nombre d'instances par objets, après faut faire le tri .
    Pour en avoir un automatiquement en cas de crash ajoute l'option java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -XX:+HeapDumpOnOutOfMemoryError
    Il y a un bon article pour analyser la mémoire java :
    http://blog.xebia.fr/2008/11/27/anal...oire-dune-jvm/

  4. #4
    Invité de passage

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 995
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 995
    Par défaut
    Si, je pense que c'est bien là le problème.
    D'après la doc Caucho (on fonctionne sur un serveur Resin), un fail over du serveur se produit quand le garbage collector réussit à récupérer moins de 2% de la mémoire en un seul passage alors que celle-ci est saturée à 98%. Ça aurait tendance à se produire quand on instancie un grand nombre d'objets. Vu la volumétrie, c'est à dire des dizaines de milliers de XML par jour, contenant chacun des milliers de nodes, ça fait un sacré paquet d'objets Java, justement.

    Je vais réimplémenter mon système en utilisant StAX, qui a justement été créé pour résoudre ce type de problème.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Une fois le arbre Jdom serializé de la mémoire vers le disque, tu n'as plus de raison de conserver des références à ce dernier.
    Il faut bien vérifier ce point qui n'est pas propre à JDom, mais à l'utilisation de JDom par ton appli.

    Le garbage collector va libérer régulièrement la mémoire en scannant les ressources qui n'ont plus de références. Le garbage collector est très efficaces pour recycler des milliers d'objets lorsqu'ils ont une "vie" courte en mémoire.

    Des xml de ~100ko, c'est idéal pour une approche Dom, Sax est a utilisé plutôt quand on cherche un traitement évènementiel sur des XML bien plus gros.

  6. #6
    Invité de passage

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 995
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 995
    Par défaut
    Attention, je parle bien de StAX (Streaming API for XML), pour générer du XML et non SAX pour le parser. Je me sens bête de ne pas y avoir pensé tout de suite, en fait.

    Je pense que le souci, c'est que là, on en est à des millions d'objets instanciés, en fait.
    100 ko par fichier xml, chez nous, c'est une petite moyenne. Mais on a bien plus lourd, et sur des dizaines de milliers de connexions par jour.

    Le constat, c'est que quand on utilise l'application sur le serveur de test, tout se passe bien, même sur la durée. Ce n'est donc pas à proprement parler une fuite mémoire.
    Par contre, quand on passe en production (notre site a pas mal de trafic), ça pète en quelques minutes.

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

Discussions similaires

  1. Quelle charge serveur/config il me faut ?
    Par Ekimasu dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 04/12/2008, 23h24
  2. Charge serveur : session en base VS session en filesystem
    Par hansaplast dans le forum Langage
    Réponses: 2
    Dernier message: 31/01/2008, 16h20
  3. Variable en session et charge serveur
    Par xfacq dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 25/10/2006, 11h34
  4. Recherche un script code pour afficher la charge serveur
    Par kevinf dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 02/06/2006, 21h01

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