Après des recherches, toujours confus au sujet de la surveillance de l'utilisation de la RAM

10

J'ai parcouru cet article , qui explique différentes méthodes pour vérifier votre utilisation de la RAM. Cependant, je ne peux pas concilier les différentes méthodes et je ne sais pas laquelle est correcte.

Lors de ma première connexion, je suis accueilli avec un écran comme celui-ci:

  System information as of Sun Apr 28 21:46:58 UTC 2013

  System load:  0.0               Processes:           76
  Usage of /:   15.6% of 7.87GB   Users logged in:     1
  Memory usage: 41%               IP address for eth0: 
  Swap usage:   0%

Cela me suggère que j'utilise 41% de ma RAM, ce qui semble assez élevé car le serveur ne fait pas grand-chose. Ou ce nombre fait-il référence à autre chose que de la RAM?

J'essaye ensuite la free -mméthode:

ubuntu@ip-:~$ free -m
             total       used       free     shared    buffers     cached
Mem:           590        513         76          0         67        315
-/+ buffers/cache:        130        459
Swap:            0          0          0

Selon le graphique explicatif de l'article, cela implique que j'ai 130 Mo de RAM utilisée et 459 Mo de RAM libre, ce qui suggère que j'utilise environ 22% de ma RAM.

Ensuite, je cours top:

top - 22:14:48 up 195 days, 21:30,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  77 total,   1 running,  76 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.3%us,  0.3%sy,  0.0%ni, 97.7%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    604376k total,   525692k used,    78684k free,    69124k buffers
Swap:        0k total,        0k used,        0k free,   322740k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
    1 root      20   0 24332 1864  976 S  0.0  0.3   0:08.75 init               
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd     

C'est le plus déroutant, car le résumé me montre en utilisant 525MG sur 604M au total, et pourtant quand est-ce que j'utilise la commande interactive "m" pour trier par mémoire supérieure le processus supérieur n'utilise que 0,3% de la mémoire ???

Enfin, la pscommande semble également montrer très peu d'utilisation de la mémoire:

root@ip-:/home/ubuntu# ps -o command,rss
COMMAND                       RSS
ps -o command,rss             788
sudo su root                 1764
su root                      1404
bash                         2132

J'aimerais que quelqu'un corrige les malentendus que j'ai qui créent ces conflits apparents.

Merci!

EDIT pour Rahul

Sortie de cat /proc/meminfo:

MemTotal:         604376 kB
MemFree:          157564 kB
Buffers:           49640 kB
Cached:           231376 kB
SwapCached:            0 kB
Active:           290040 kB
Inactive:          97772 kB
Active(anon):     107672 kB
Inactive(anon):     4844 kB
Active(file):     182368 kB
Inactive(file):    92928 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                52 kB
Writeback:             0 kB
AnonPages:        106836 kB
Mapped:            22920 kB
Shmem:              5712 kB
Slab:              42032 kB
SReclaimable:      34016 kB
SUnreclaim:         8016 kB
KernelStack:         688 kB
PageTables:         3584 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      302188 kB
Committed_AS:     242768 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        7152 kB
VmallocChunk:   34359729008 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      637952 kB
DirectMap2M:           0 kB
Jonas
la source
# 1) La commande en haut pour trier par mémoire n'est pas m , il est M . # 2) Pour voir tous les processus, essayez la commande ** ps ax -o, rss **; ce que vous avez exécuté montre juste vos propres.
tink
Veuillez également nous mettre à jour la sortie decat /proc/meminfo
Rahul Patil
5
linuxatemyram.com
Michael Hampton
@tink, merci pour cette explication. J'ai essayé ps ax -o rss | awk '{ sum+=$1} END {print sum}'tout à l'heure et 153156.
Jonah
@RahulPatil, OP mis à jour. Notez que les processus en cours d'exécution peuvent être légèrement différents des numéros d'origine, mais ne devraient pas être si éloignés. De plus, le résultat que j'ai obtenu pour vous ne semble pas correspondre au résultat obtenu pour Tink dans le commentaire ci-dessus. Celles-ci ont été prises à quelques minutes d'intervalle.
Jonah

Réponses:

8

Vous avez juste besoin de comprendre le concept de mémoire

Selon votre sortie de / proc / meminfo, il vous suffit de noter ci-dessous les choses:

Tampons : - Un tampon est quelque chose qui n'a pas encore été "écrit" sur le disque. Il représente la quantité de RAM dédiée au cache du disque dur. "En cache" est similaire à "Tampons", mais cette fois, il met en cache les pages de la lecture de fichiers

En cache : - Un cache est quelque chose qui a été "lu" sur le disque et stocké pour une utilisation ultérieure. Généralement, vous pouvez considérer la zone de cache comme une autre RAM "libre" car elle sera réduite progressivement si l'application demande plus de mémoire.

Il suffit de comprendre que les "tampons" et "mis en cache" représentent la taille du cache système. Ils augmentent ou rétrécissent dynamiquement comme demandé par le mécanisme interne du noyau Linux.

chez Webhosting, ils font un cache clair en utilisant ci-dessous cmd: (principalement configuré en cron):

sync && echo 3 > /proc/sys/vm/drop_caches

Lien de citation

MODIFIER pour une exigence supplémentaire, c.-à-d. Par utilisation de la mémoire utilisateur

#!/bin/bash
total_mem=0

printf "%-10s%-10s\n" User MemUsage

while read u m
do
        [[ $old_user != $u ]] && { printf "%-10s%-0.1f\n" $old_user $total_mem; total_mem=0; }
        total_mem=$(echo $m + $total_mem | bc);
        old_user=$u

done < <(ps --no-headers -eo user,%mem| sort -k1)

#--EOF

Veuillez vérifier avec le script ci-dessus et faites-moi savoir s'il s'affiche correctement ou non.

Rahul Patil
la source
Merci Rahul. Une dernière question. Étant donné free -mqu'il ne fournit pas un moyen d'afficher la mémoire utilisée par utilisateur, quel est un moyen précis de déterminer la quantité réelle de RAM consommée par un utilisateur particulier? Cela se produit lors de la surveillance de votre propre utilisation de la mémoire sur un serveur partagé, par exemple.
Jonah
@Jonah J'ai mis à jour .. veuillez vérifier et faites le moi savoir
Rahul Patil
ce script ne fonctionne pas comme prévu .. mais j'essaie de le mettre à jour bientôt
Rahul Patil
@Jonah merci d'avoir accepté mes années .. mais merci pour MichaelHampton ...
Rahul Patil
2

Bonne réponse @RahulPatil.

Un autre point à considérer à propos de ps ou top est le suivant

Cet outil [exmap] est plus précis que ps ou top car il prend en compte les bibliothèques partagées utilisées par plusieurs applications. Par exemple, si deux applications utilisent la même bibliothèque partagée, qui occupe 1 Mo de mémoire, ps affichera les deux applications en utilisant 1 Mo de mémoire supplémentaire, tandis qu'exmap affiche plus correctement chaque application en utilisant 500 Ko. Cette plus grande précision est particulièrement importante pour évaluer les environnements de bureau tels que KDE et GNOME, qui utilisent très fortement les bibliothèques partagées entre les applications.

Via ibm / developerworks / linux_memory

Étant donné que votre question se réfère à un serveur sans tête - je ne sais pas combien de doubles rapports top ou ps auront réellement.

Yeow_Meng
la source
0

Je crains que nous ne passions à côté de l'évidence, car c'est un "bien sûr" pour la plupart d'entre nous.

Jonah, pardonnez-moi si je me trompe, mais vos questions semblent comme si vous n'aviez pas réalisé que toutes ces valeurs, l'utilisation du processeur en particulier, varieront normalement beaucoup d'une seconde à l'autre.

L'utilisation du processeur peut passer de chiffres uniques à 100% instantanément au démarrage d'un nouveau processus, mais rapidement (espérons-le) retomber dans la plage inférieure à 50%.

L'utilisation de la mémoire change plus lentement mais là, Linux essaie d'utiliser la mémoire non utilisée en exécutant des processus pour "mettre en cache" les accès au disque. Par exemple, il essaie de prédire ce qui devra être lu à partir du disque suivant, comme peut-être le reste d'un gros fichier après la lecture d'une partie, et de le précharger dans le cache. Certaines des valeurs d'utilisation de la mémoire incluent à la fois la mémoire utilisée par les processus ainsi que la mémoire utilisée pour la mise en cache. Sur un système qui fonctionne depuis un certain temps, les deux combinés seront probablement de 80 à 90% ou plus.

Considérez également que le processus que vous exécutez pour afficher l'utilisation, par exemple top, utilise également le processeur et la mémoire. Si vous avez écrit un script avec une boucle pour signaler l'utilisation du processeur en continu, il afficherait presque toujours 100% car l'acte de rapporter l'utilisation lui-même (sans quelques sleep retards) utilise tout le processeur.

DocSalvager
la source
Doc, merci pour la pensée, mais ce n'était pas le problème
Jonah