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

Langage Java Discussion :

Java et consommation de mémoire swap


Sujet :

Langage Java

  1. #1
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut Java et consommation de mémoire swap
    Bonjour,

    Je recherche actuellement comment java utilise la mémoire swap. Apparemment lorsqu'on fait un top sous unix, les process java apparaissent comme consommateur de swap (800Mo~1.2Go par exemple) mais la mémoire vraiment utilisé ne dépasse pas 64 Mo puisque je n'ai pas précisé de Xmx par défaut.

    Ma compréhension du swap c'est que c'est un espace de mémoire utilisé lorsque la ram commence à manquer, mais c'est aussi un espace ou l'on place des données non accédées depuis un moment. C'est le système qui s'en occupe.

    En cherchant un peu sur google, je ne trouve pas de résultat satisfaisant mais des posts sur divers forums semble indiquer que java est un gros consommateur de swap. Pourquoi ?

    Il me semble cependant que c'est un comportement normal, mais ayant déjà eu des demandes sur le sujet, je préfère ne plus être sec pour expliquer que c'est un comportement ok.

  2. #2
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    La mémoire SWAP c'est système. Rien à voir avec Java.
    Si ton Java va sur le swap c'est que le système lui dit de le faire.
    Java n'est pas particulièrement un consommateur de mémoire "swap"... c'est un consommateur de mémoire, comme toute autre application.

    Par ailleurs l'utilisation de "64Mo" car pas défini de Xmx, c'est un peu plus compliqué. Ce paramètre concerne le Heap Space, c'est tout, il y a d'autres choses chargées en mémoire comme par exemple le JRE, le code compilé mis en cache, etc.

    Plus d'infos ici : http://gfx.developpez.com/tutoriel/java/gc/
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  3. #3
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    on est bien d'accord, la mémoire swap c'est le système qui la gère mais il apparait que mes process java apparaissent comme consommateur et j'aimerais comprendre un peu plus.

    Exemple :

    PID USER PR NI %CPU TIME+ %MEM VIRT SWAP RES SHR S COMMAND
    14259 tomcat 24 0 1 124:06.13 0.8 1256m 1.2g 33m 1044 S java
    (sur AIX)

    Ce process java consomme en résident : 33M, jusque là, rien d'anormal. Mais en Swap : 1.2g

    Je ne suis pas certain de comprendre ce point, géré par le système ou pas. Ca n'a peut être rien à voir mais mon process les consomme.

    Quand a -Xmx, oui ca concerne le heap space, qui est la somme de la young, la tenured et la perm space (Cf ton lien). Le code compilé est dans la perm, donc le -Xmx correspond aussi à cette mémoire.
    D'ailleurs un test simple, tu crées un jar de 64Mo, tu lances avec -Xmx50M, ca plante.

  4. #4
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par hugo123 Voir le message
    Ce process java consomme en résident : 33M, jusque là, rien d'anormal. Mais en Swap : 1.2g
    Peut pas t'aider, 1.2g c'est pas normal (enfin je crois pas).

    Citation Envoyé par hugo123 Voir le message
    Quand a -Xmx, oui ca concerne le heap space, qui est la somme de la young, la tenured et la perm space (Cf ton lien). Le code compilé est dans la perm, donc le -Xmx correspond aussi à cette mémoire.
    Je me suis mal expliqué, je parlais des portions de code compilées nativement par la JVM afin d'améliorer les performances, pas du code interprété.
    Le Heap ne représente pas tout et ton test avec un gros jar n'est pas révélateur car je charge bien plus que ça dans un Xmx=32. Mais ce n'est pas le propos.

    Tu utilises une JVM Sun au moins ?
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  5. #5
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    le produit que j'utilise tourne sur plusieurs OS et je constate la même chose sur chacun. Dans l'exemple ci dessus, il s'agissait d'AIX et donc de leur JVM puisque IBM a sa propre implémentation. Mais sur une redhat 4 j'obtiens le même type d'observation.

    Cependant cela n'a pas l'air lié a mon appli. Sur une même machine, dans le top apparaissent plusieurs process java de plusieurs applis et chacun fait 1.2g. (Pourtant le swap de la machine ne fait pas plus de 2G donc inférieur a la somme des swap de chaque process).

    Bref, peut être que ce n'est qu'un paramétrage machine, c'est peut être normal et je me casse la tête pour rien, mais j'aimerais comprendre ^^ En général ce genre de questions, si un client la pose et qu'on répond approximativement malgré le fait que l'on soit certain de sa consommation mémoire, ca passe mal.

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Ta swap va dépendre du -Xmx avec lequel tu lances ta jvm.

    J'ai un programme java qui utilise 12 Mo de mémoire résidente (RES quand tu regardes le top) et ce, quelque soit le -Xmx que j'utilise, ce qui est normal.

    Par contre, plus je monte en -Xmx, plus mon swap augmente:
    -Xmx -> SWAP (en Mo)
    32 -> 203
    64 -> 234
    128 -> 298
    256 -> 490
    512 -> 684
    1024 -> 1.2Go
    2048 ->2.2Go

    Si je ne précise pas de paramètre -Xmx, j'ai 1.2Go de Swap alloué, comme si je spécifiais un -Xmx1024m. Faut que je vérifie dans les docs mais cela doit être la valeur par défaut utilisé par une jvm hotspot sur du 64bits (lancée par défaut en mode "server").
    Si je lance la jvm en mode "client", je gagne une centaine de Mo. Enfin quand je dis, je gagne... c'est juste une réservation de mémoire, hein!
    Par contre, je ne sais pas ce qui se passe quand un process demande soudain plein de mémoire si j'ai plein de jvm qui tournent et qui ont donc réservé plein de swap.

    J'ai le problème en ce moment. Plein de jvm qui tournent. tout à coup, le JIT a besoin d'un max de mémoire pour faire une compil native et comme y'a plus assez de mémoire, la jvm se vautre.

Discussions similaires

  1. Probléme: un client java qui consomme une array avec soap
    Par mejdi331 dans le forum Services Web
    Réponses: 1
    Dernier message: 28/01/2009, 16h54
  2. [AIX] Libération mémoire SWAP
    Par linar009 dans le forum AIX
    Réponses: 10
    Dernier message: 30/08/2008, 14h37
  3. consommation de mémoir sqlserver+image
    Par salihovic dans le forum Windows Forms
    Réponses: 2
    Dernier message: 16/02/2008, 13h16
  4. Grosse consommation de mémoire au démarrage
    Par guenievre dans le forum Java ME
    Réponses: 7
    Dernier message: 10/10/2007, 11h36
  5. [Java Outlook Connector] ressources mémoires
    Par winnux dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 26/07/2006, 15h54

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