• [^] # Re: Récupérer la charge processeur d'une application

    Posté par . En réponse au message Récupérer la charge processeur d'une application.. Évalué à 4.

    Tu ne trouveras pas ces informations parce qu'elles n'ont pas forcément de sens ou parce qu'il est impossible d'avoir l'information.

    LE CPU
    =====

    Que signifie le %CPU ? Sur une machine monoprocesseur, lorsque le processus est actif, il consomme 100% du CPU. Lorsqu'il est en attente du processeur, il consomme 0% et lorsqu'il est en attente d'un evenement, il consomme également 0%.

    Le % d'occupation CPU n'a de sens que lorsqu'on fait une moyenne sur un certain intervalle de temps, mais la valeur va beaucoup varier en fonction des autres processus qui s'exécutent sur la machine.

    On peut éventuellement donner un peu de sens au temps CPU consommé sur un certain intervale, pour cela, tu vas trouver le temps CPU user, le temps CPU systeme et l'heure de démarrage du processus, tu peux alors calculer un ratio un peu comme tu veux en utilisant cela.

    La Mémoire
    ========

    Linux est un OS conçu de façon intelligente et supportant de nombreuses fonctionnalitées. Librairies, Swap, mémoire partagée, copie à l'écriture...

    Regarde donc le fichier /proc/self/maps

    Lorsqu'un processus s'exécute, le binaire est chargé en mémoire; mais si le même programme est lancé deux fois et qu'il ne s'agit pas de code auto-modifiant (ce qui est mal), linux n'a en réalité qu'une seule copie en mémoire. Ca commence mal pour mesurer l'occupation mémoire.

    Les programmes utilisent des librairies dynamiques, qui ont le même avantage, on ne charge pas la libc pour chaque nouveau processus, seule une ou quelques pages sont propre à chaque processus. Est-ce qu'il faut compter les librairies dans la taille mémoire occupée ?

    Lorsque l'OS a besoin de place en mémoire, il envoi les données dans le SWAP, faut-il compter cette mémoire ? S'il s'agit de mémoire correspondant à l'image d'un fichier (exécutable par exemple) et que la page est intacte, on n'a même pas besoin de la mettre dans le swap puisqu'on pourra la relire directement sur le disque.

    Lorsqu'un processus réclame de la mémoire, elle n'est pas forcément allouée à ce moment là, mais plutot au premier accès qui sera fait, on ne sait donc pas trop s'il faut compter cette mémoire ou non.

    Ca continue, on peut mapper des fichiers en mémoire, est-ce que c'est réellement de la mémoire occupée ? On peut partager de la mémoire entre plusieurs processus, même problème.

    Enfin un processus qui va faire des I/O disque va occuper de nombreuses pages mémoire dans le cache disque, ces pages peuvent être occupées uniquement pour ce processus, pourtant elles sont dans le noyau et on aura toutes les peines du monde à retrouver le processus correspondant.

    L'occupation mémoire est donc une notion très très vague qu'il n'est pas réellement possible de définir. Le fichier maps donne l'espace mémoire d'un processus, sans dire s'il y a réellement de la mémoire occupée derrière.