Forum Linux.débutant Mémoire occupée par un processus

Posté par .
Tags : aucun
1
3
jan.
2009
Bonjour,

J'ai une question de débutant. Je ne débute pas vraiment sous Linux mais dans certains domaines je ne suis pas bon.

J'aimerais savoir comment déterminer la quantité de mémoire utilisée par un processus. Ce que me donne ps n'est pas clair pour moi (SZ et RSS), ou alors il faut m'expliquer car pour moi RSS est obligatoirement plus petit que SZ et je constate que ce n'est pas vrai pour certains des processus que je vois.
  • # man ps, man top

    Posté par . Évalué à 6.

    man ps : http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man1/(...)

    qui explique RSS et SZ et ajoute

    Les champs SIZE et RSS ne prennent pas en compte les tables des pages et la structure task_struct du processus; Il y a toujours au moins 12 Ko de données résidentes en mémoire. SIZE est la taille virtuelle du processus (code + données + pile).

    man top te donne

    RES -- Resident size (kb) : The non-swapped physical memory a task has used.

    SHR -- Shared Mem size (kb) : The amount of shared memory used by a task. It simply reflects memory that could be potentially shared with other processes
    • [^] # Re: man ps, man top

      Posté par . Évalué à 2.

      Merci de me donner le lien pour la page de manuel de ps, comme si je ne l'avais pas lue :-)

      Cette page de manuel n'explique rien du tout justement. Et ce n'est pas son role. Elle indique que RSS est ce qui est réellement en mémoire alors que SZ est ce qui est virtuellement en mémoire. Me voilà bien avancé. J'en conclu que RSS est toujours plus petit ou égal à SZ. Or j'ai plusieurs processus qui ont un SZ plus petit que leur RSS, donc je constate que la super explication de la page de manuel est un peu courte.

      Les autres ressources que j'ai lu se bornent aux même explications, voilà pourquoi je n'en sais pas plus.
      • [^] # Re: man ps, man top

        Posté par . Évalué à 2.

        simplement parceque certains programmes n'utilisent pas de memoire virtuelle

        tout comme certains programmes n'utilisent pas de memoire partagée (SHR ou Shared)
        • [^] # Re: man ps, man top

          Posté par (page perso) . Évalué à 2.

          :-) Ta réponse montre que tu n'as pas saisi ce que recouvre RSS et SZ. La mémoire virtuelle n'a rien à voir avec SZ :-)

          Mais rassure toi: ceux qui savent ce que ça veut dire se dépêchent d'indiquer que c'est parfaitement inutile. Pas de regrets.
          note: je ne sais pas non plus car comme l'indique Gremouss j'ai aussi des processus avec RSS>SZ.
      • [^] # Re: man ps, man top

        Posté par (page perso) . Évalué à 2.

        T'aurais un exemple de process ayant RSS > VSZ? Quand je fais la commande suivante, je n'ai aucun nombre négatif:

        ps aux | awk '{ print $5-$6, $11}' | sort -n | head

        J'ai essayé avec ma machine qui n'utilise pas de swap (au prix de la RAM...) et dans une VM qui swappe beaucoup.

        Par contre, les valeurs données par "ps" peuvent être vite trompeuses dès que le programme commence à utiliser des bibliothèques partagées. C'est bien si ton process n'en utilise pas ou si il utilise beaucoup de données.
        • [^] # Re: man ps, man top

          Posté par (page perso) . Évalué à 2.

          ps -F
          UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
          1000 1093 1090 0 1473 2940 3 00:36 pts/0 00:00:00 -bash
          1000 1137 1093 0 966 948 1 00:38 pts/0 00:00:00 ps -F


          Je remarque que tu parles de VSZ alors que personne n'en a encore parlé. Avec ce nouveau mot-clé j'ai fini par trouver mieux.
          En gros:
          SZ: la taille du programme (sans les données)
          VSZ: la taille totale (en RAM ou pas)
          RSS: la taille totale présente en RAM
          Donc forcément SZ est généralement plus petit que RSS.
          Ce que je n'ai pas trouvé, c'est si VSZ tient compte de la mémoire réservée mais non utilisée (pages pas encore écrites par le programme). Pas le temps de tester ce soir. Dodo.

          Reste que ces informations ne tiennent pas du tout compte de la mémoire partagée. Sur nos serveurs équipés de vmware ça fait tout drôle d'avoir la somme des RSS très largement supérieure à la mémoire physiquement présente. Surtout que free indique qu'il reste pas mal de place :-)
  • # Question délicate :-)

    Posté par (page perso) . Évalué à 5.

    Ce que retourne ps n'est pas vraiment ce que tu souhaites généralement. Et c'est généralement considéré comme peu utile en ce qui concerne la mémoire. Ca ne tient pas compte de ce qui est partagé entre applications par exemple.

    Un bon endroit pour en savoir plus est /proc/[pid]/maps et /proc/[pid]/smaps

    Jette un oeil là-dessus:
    http://lwn.net/Articles/230975/

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.