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

Java Discussion :

Curiosité sur la consommation mémoire


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 Curiosité sur la consommation mémoire
    Bonjour,

    on essaie de réduire la consommation mémoire d'un process java sur une machine en ajustant différent paramètre. La situation actuelle est la suivante:

    commande java lancée par jboss, rapportée par la commande ps:
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    /web/intraweb/apps/java/jdk7/bin/java -Dprogram.name=run.sh -server -Djboss.bind.address=0.0.0.0 -Xms256m -Xmx1024m -XX:MaxPermSize=384m -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n -Xms256m -Xmx1024m -XX:MaxPermSize=384m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djira.jelly.on=true -Djavax.xml.transform.TransformerFactory=org.apache.xalan.processor.TransformerFactoryImpl -Duser.timezone=Europe/Brussels -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -Djava.net.preferIPv4Stack=true -Djava.endorsed.dirs=/web/intraweb/apps/jboss//lib/endorsed -classpath /web/intraweb/apps/jboss//bin/run.jar:/web/intraweb/apps/java/jdk7/lib/tools.jar org.jboss.Main -c default
    On y constate donc: une Heap entre 256 et 1024M, un max permgen de 384M. L'un dans l'autre, à pleine charge, le process devrait occuper dans les 1.4G sur la machine.

    Si nous allons sur la console jboss faire un état de la mémoire, nous avons:
    Code x : 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Total Memory Pools: 5
    
        Pool: Code Cache (Non-heap memory)
    
            Peak Usage : init:2555904, used:29118016, committed:29491200, max:50331648
            Current Usage : init:2555904, used:29052352, committed:29491200, max:50331648
    
    
                |----------------------------------------| committed:28,12Mb
                +---------------------------------------------------------------------+
                |////////////////////////////////////////| | max:48Mb
                +---------------------------------------------------------------------+
                |---------------------------------------| used:27,71Mb
    
    
        Pool: PS Eden Space (Heap memory)
    
            Peak Usage : init:67174400, used:341901312, committed:341901312, max:344522752
            Current Usage : init:67174400, used:274997776, committed:341901312, max:343736320
    
    
                |--------------------------------------------------------------------| committed:326,06Mb
                +---------------------------------------------------------------------+
                |//////////////////////////////////////////////////////// || max:327,81Mb
                +---------------------------------------------------------------------+
                |-------------------------------------------------------| used:262,26Mb
    
    
        Pool: PS Survivor Space (Heap memory)
    
            Peak Usage : init:11141120, used:99614240, committed:119275520, max:119275520
            Current Usage : init:11141120, used:0, committed:7208960, max:7208960
    
    
                |---------------------------------------------------------------------| committed:6,88Mb
                +---------------------------------------------------------------------+
                | | max:6,88Mb
                +---------------------------------------------------------------------+
                | used:0b
    
    
        Pool: PS Old Gen (Heap memory)
    
            Peak Usage : init:178978816, used:715849720, committed:715849728, max:715849728
            Current Usage : init:178978816, used:715845720, committed:715849728, max:715849728
    
    
                |---------------------------------------------------------------------| committed:682,69Mb
                +---------------------------------------------------------------------+
                |/////////////////////////////////////////////////////////////////////| max:682,69Mb
                +---------------------------------------------------------------------+
                |--------------------------------------------------------------------| used:682,68Mb
    
    
        Pool: PS Perm Gen (Non-heap memory)
    
            Peak Usage : init:21757952, used:211419768, committed:212074496, max:402653184
            Current Usage : init:21757952, used:211413296, committed:211484672, max:402653184
    
    
                |-----------------------------------| committed:201,69Mb
                +---------------------------------------------------------------------+
                |///////////////////////////////////| | max:384Mb
                +---------------------------------------------------------------------+
                |-----------------------------------| used:201,62Mb

    En résumé, java devrait utiliser ~1260M d'après ce rapport.

    Nous avons 142 threads en cours, avec une allocation par défaut de 1M / thread pour la stack (cf docs google), nous arrivons à 1.4G réels.

    Quand nous faisons un top sur le serveur, nous obtenons:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
     6417 *****  20   0 4490m 2.0g  11m S 281.6 26.4   1074:49 java
    Donc une consommation réelle entre 2G et 4G suivant le paramètre pris en compte

    Quelqu'un a une idée d'où viennent ces 600M de consommation supplémentaire???

    Je rajoute un status du process pour plus de détails
    Code x : 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
    33
    34
    35
    36
    37
    38
    39
    40
    $ cat /proc/6417/status
    Name:   java
    State:  S (sleeping)
    Tgid:   6417
    Pid:    6417
    PPid:   6391
    TracerPid:      0
    Uid:    2290    2290    2290    2290
    Gid:    211     211     211     211
    Utrace: 0
    FDSize: 2048
    Groups: 211 227 230 234
    VmPeak:  4639676 kB
    VmSize:  4598608 kB
    VmLck:         0 kB
    VmHWM:   2131132 kB
    VmRSS:   2128000 kB
    VmData:  4423764 kB
    VmStk:        88 kB
    VmExe:         4 kB
    VmLib:     15036 kB
    VmPTE:      5008 kB
    VmSwap:    30680 kB
    Threads:        152
    SigQ:   0/62831
    SigPnd: 0000000000000000
    ShdPnd: 0000000000000000
    SigBlk: 0000000000000000
    SigIgn: 0000000000000002
    SigCgt: 2000000181005ccd
    CapInh: 0000000000000000
    CapPrm: 0000000000000000
    CapEff: 0000000000000000
    CapBnd: ffffffffffffffff
    Cpus_allowed:   f
    Cpus_allowed_list:      0-3
    Mems_allowed:   00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
    Mems_allowed_list:      0
    voluntary_ctxt_switches:        1
    nonvoluntary_ctxt_switches:     4

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Par défaut
    si c'est un jdk7 supérieur au jdk7_40, il y a deux outils qui permettent de monitorer, et d'obtenir une idée assez précise du fonctionnement de l'application et de sa consommation mémoire:

    Java Flight Recorder:

    http://docs.oracle.com/javase/7/docs...roduction.html

    et

    Java Mission Control

    http://www.oracle.com/technetwork/ja...l-1998576.html

  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
    1.7.0_21

    Ce qui m'intéresse, c'est une information globale sur quelle partie de la consommation d'un JVM j'ai oubliée dans mon calcul, pas de savoir précisément que cette jvm a alloué 200M à des String et 600M à des byte[]

    On cherche ce qu'on doit lui filer comme paramètre pour lui dire, grosso modo, tu dépasse pas les 1.5G, ca visiblement, ceux qu'on a filé ne sont pas suffisants

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut
    Cela ne serait pas plutôt la commande top qui donne pas la "vrai valeur" de l'utilisation de la jvm ?

  5. #5
    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
    D'accord, mais comme je l'ai montré, tout me donne les même valeurs Si quelqu'un a des explication sur pourquoi top aurait tord et comment je pourrais avoir la "vrai valeur"....

Discussions similaires

  1. Besoin d'aide sur consommation mémoire
    Par Shypster dans le forum C#
    Réponses: 16
    Dernier message: 17/09/2012, 23h52
  2. Consommation mémoire sur Redhat
    Par pierrick76 dans le forum Administration système
    Réponses: 9
    Dernier message: 06/01/2012, 15h55
  3. [TStringGrid] Consommation mémoire
    Par spender dans le forum Bases de données
    Réponses: 4
    Dernier message: 09/03/2006, 21h48
  4. [Consommation mémoire] Quoi utiliser pour trouver?
    Par doudine dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 25/01/2006, 13h50
  5. Réponses: 4
    Dernier message: 09/11/2005, 13h32

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