GNU/Linux >> Tutoriels Linux >  >> Linux

Linux - Besoin d'explications sur la taille de l'ensemble résident/taille virtuelle ?

J'ai trouvé que pidstat serait un bon outil pour surveiller les processus. Je veux calculer l'utilisation moyenne de la mémoire d'un processus particulier. Voici quelques exemples de sortie :

02:34:36 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
02:34:37 PM      7276      2.00      0.00  349212 210176   7.14  scalpel

(Ceci fait partie de la sortie de pidstat -r -p 7276 .)

Dois-je utiliser les informations Resident Set Size (RSS) ou Virtual Size (VSZ) pour calculer la consommation moyenne de mémoire ? J'ai lu quelques trucs sur Wikipédia et sur les forums mais je ne suis pas sûr de bien comprendre les différences. De plus, il semble qu'aucun d'entre eux ne soit fiable. Alors, comment puis-je surveiller un processus pour obtenir son utilisation de la mémoire ?

Toute aide à ce sujet serait utile.

Réponse acceptée :

RSS est la quantité de mémoire dont ce processus dispose actuellement dans la mémoire principale (RAM). VSZ est la quantité totale de mémoire virtuelle dont dispose le processus. Cela inclut tous les types de mémoire, à la fois en RAM et en échange. Ces chiffres peuvent être faussés car ils incluent également des bibliothèques partagées et d'autres types de mémoire. Vous pouvez avoir cinq cents instances de bash en cours d'exécution, et la taille totale de leur empreinte mémoire ne sera pas la somme de leurs valeurs RSS ou VSZ.

Si vous avez besoin d'avoir une idée plus détaillée de l'empreinte mémoire d'un processus, vous avez quelques options. Vous pouvez passer par /proc/$PID/map et éliminez les choses que vous n'aimez pas. S'il s'agit de bibliothèques partagées, le calcul peut devenir complexe en fonction de vos besoins (ce dont je pense me souvenir).

Si vous ne vous souciez que de la taille du tas du processus, vous pouvez toujours simplement analyser le [heap] entrée dans la map dossier. La taille que le noyau a allouée au tas du processus peut ou non refléter le nombre exact d'octets que le processus a demandé à allouer. Il y a des détails infimes, des éléments internes du noyau et des optimisations qui peuvent perturber cela. Dans un monde idéal, ce sera autant que votre processus a besoin, arrondi au multiple le plus proche de la taille de la page système (getconf PAGESIZE vous dira ce que c'est - sur les PC, c'est probablement 4 096 octets).

Si vous voulez voir combien de mémoire un processus a alloué , l'un des meilleurs moyens consiste à renoncer aux métriques côté noyau. Au lieu de cela, vous instrumentez les fonctions d'allocation de mémoire de tas de la bibliothèque C avec le LD_PRELOAD mécanisme. Personnellement, j'abuse un peu de valgrind pour obtenir des informations sur ce genre de choses. (Notez que l'application de l'instrumentation nécessitera de redémarrer le processus.)

Connexe :Linux - J'ai accidentellement supprimé le dossier /root et maintenant la chaîne du shell est différente. Ce qui donne?

Veuillez noter, puisque vous pouvez également comparer les runtimes, que valgrind rendra vos programmes très légèrement plus lents (mais probablement dans vos tolérances).


Linux
  1. Redimensionner une fenêtre à une taille définie sous Linux

  2. Nombre maximum de threads par processus sous Linux ?

  3. enregistrement de la marque d'eau haute de la mémoire RAM d'un processus Linux

  4. Limiter l'utilisation de la mémoire pour un seul processus Linux

  5. Représentation graphique de l'utilisation de la mémoire des processus sous Linux

Swappiness sous Linux :tout ce que vous devez savoir

Comment étendre la taille du disque de la machine virtuelle KVM sous Linux

Commandes Linux :explorer la mémoire virtuelle avec vmstat

Linux - Comment définir l'affinité du processeur d'un processus sous Linux ?

Trouver la taille de la RAM sous Linux

Comment l'utilisation de la mémoire est-elle signalée sous Linux ?