Comment puis-je surveiller l'utilisation de la mémoire?

265

J'ai l'habitude topde voir l'utilisation de la mémoire pour le moment. Mais j'aimerais surveiller l'utilisation de la mémoire sur une période donnée. Par exemple, lancez la surveillance, puis exécutez quelques commandes et arrêtez-la pour voir combien de mémoire a été utilisée pendant la période.

Comment puis-je faire cela sur Ubuntu Server?

Je suppose que je pourrais commencer une tâche cron toutes les 5 secondes environ et invoquer une commande qui enregistre l'utilisation actuelle de la mémoire dans un fichier texte. Mais quelle commande dois-je utiliser pour obtenir l’utilisation actuelle de la mémoire dans un format facile à enregistrer dans un fichier texte?

Jonas
la source

Réponses:

322

Je recommande de combiner les réponses précédentes

watch -n 5 free -m

Notez que Linux aime utiliser toute mémoire supplémentaire pour mettre en cache les blocs de disque dur . Donc, vous ne voulez pas regarder seulement le libre Mem. Vous voulez regarder la freecolonne de la -/+ buffers/cache:ligne. Cela montre combien de mémoire est disponible pour les applications. Alors j'ai juste couru free -met j'ai eu ceci:

             total       used       free     shared    buffers     cached
Mem:          3699       2896        802          0        247       1120
-/+ buffers/cache:       1528       2170
Swap:         1905         62       1843

Je sais que j'utilise 1528 Mo et que j'ai 2170 Mo gratuits.

Remarque: pour arrêter ce watchcycle, vous pouvez simplement appuyer sur Ctrl+ C.

Justin Force
la source
1
Merci, c'est informatif. Mais sur la colonne utilisée que vous avez d’abord 2896et ensuite 1528sur les tampons, cela ne signifie-t-il pas que vous utilisez 2896 + 1528?
Jonas
8
Mem: usedest votre mémoire totale utilisée. -/+ buffers/cache: usedest votre mémoire totale utilisée moins les tampons et le cache. Je sais que la sortie a l'air drôle, mais aucune arithmétique n'est requise ici. Vous recherchez juste / free dans la rangée - / + buffers / cache.
Justin Force
6
L'option -h est beaucoup plus agréable
frmdstryr
1
@frmdstryr Bon point! -h / - humain n'existait pas quand j'ai écrit ceci, cependant. gitlab.com/procps-ng/procps/commit/…
Justin Force
3
@ cbradsh1 Vous pouvez simplement faire free -h, par exemple, watch -n 5 free -hpour obtenir une sortie "lisible par l'homme", par exemple 2.1Gau lieu de 2170dans la sortie.
Justin Force
213

Je pense que htopc'est la meilleure solution.

  • sudo apt-get install htop

De cette façon, vous remarquerez quels programmes utilisent le plus de RAM. et vous pouvez facilement en terminer un si vous le souhaitez. Voici une capture d'écran!

Alvar
la source
2
htopC'est bien parce que c'est plus "graphique" et peut-être plus facile à lire que free.
Mjswensen
1
Je ne comprends pas la sortie. La RESmémoire utilisée par cette application est-elle en Mo? Alors qu'est-ce que c'est SHR?
Faizal
1
@faizal: mémoire virtuelle, réservée et partagée.
WitchCraft
1
comment htopvous montre- t -il «l'utilisation de la mémoire sur une période donnée»?
dangel
htop -s M_SHARE htop -s TEMPS
Tomachi
40

Si vous recherchez une répartition précise de la mémoire utilisée par chaque processus en cours d'exécution, je vous conseillerais donc de consulter ps_mem.py ( disponible à l'adresse pixelbeat.org).

Je sais que dans les commentaires ci-dessus, vous avez indiqué vouloir un instantané d’une seule ligne de free , mais j’ai pensé que cela pourrait être utile à d’autres.

Exemple de sortie:

user@system:~$ sudo ps_mem.py
[sudo] password for user:
 Private  +   Shared  =  RAM used       Program

  4.0 KiB +   7.5 KiB =  11.5 KiB       logger
  4.0 KiB +   8.0 KiB =  12.0 KiB       mysqld_safe
  4.0 KiB +  10.0 KiB =  14.0 KiB       getty
  4.0 KiB +  42.0 KiB =  46.0 KiB       saslauthd (5)
 48.0 KiB +  13.0 KiB =  61.0 KiB       init
 56.0 KiB +  27.5 KiB =  83.5 KiB       memcached
 84.0 KiB +  26.5 KiB = 110.5 KiB       cron
120.0 KiB +  50.0 KiB = 170.0 KiB       master
204.0 KiB + 107.5 KiB = 311.5 KiB       qmgr
396.0 KiB +  94.0 KiB = 490.0 KiB       tlsmgr
460.0 KiB +  65.0 KiB = 525.0 KiB       rsyslogd
384.0 KiB + 171.0 KiB = 555.0 KiB       sudo
476.0 KiB +  83.0 KiB = 559.0 KiB       monit
568.0 KiB +  60.0 KiB = 628.0 KiB       freshclam
552.0 KiB + 259.5 KiB = 811.5 KiB       pickup
  1.1 MiB +  80.0 KiB =   1.2 MiB       bash
  1.4 MiB + 308.5 KiB =   1.7 MiB       fail2ban-server
888.0 KiB +   1.0 MiB =   1.9 MiB       sshd (3)
  1.9 MiB +  32.5 KiB =   1.9 MiB       munin-node
 13.1 MiB +  86.0 KiB =  13.2 MiB       mysqld
147.4 MiB +  36.5 MiB = 183.9 MiB       apache2 (7)
---------------------------------
                        208.1 MiB
=================================

 Private  +   Shared  =  RAM used       Program

La seule partie que je n'aime pas, c'est le fait que le script prétend nécessiter des privilèges root. Je n'ai pas encore eu l'occasion de voir exactement pourquoi c'est le cas.

Jason Mock
la source
Je me demande si la mémoire est partagée entre les threads. Il est partagé entre les processus, n'est-ce pas? Au moins sur Windows ...
Thomas Weller
Donc, dans ce cas, la mémoire partagée fait référence à des pages mappées par plusieurs processus sous la forme de bibliothèques partagées. De plus, dans le contexte d'applications multithreads, l'ensemble de l'espace mémoire du processus est accessible à tous les threads de ce processus.
Jason Mock
4
Maintenant disponible dans PyPI ( pip install ps_mem) et sur GitHub .
Leif Arne Storset
@ThomasWeller: Oui, les threads partagent toujours la mémoire, alors que les processus peuvent en partager tout ou partie dans certaines conditions.
Leif Arne Storset
pour cela j'utilise gnome-system-monitor
24

Utilisez la commande free . Par exemple, ceci est la sortie de free -m:

             total       used       free     shared    buffers     cached
Mem:          2012       1666        345          0        101        616
-/+ buffers/cache:        947       1064
Swap:         7624          0       7624

free -m | grep /+ renverra uniquement la deuxième ligne:

-/+ buffers/cache:        947       1064
Isaïe
la source
Merci, est superbe. Donc, ceci 947est l'utilisation de la mémoire moins la mémoire utilisée pour les tampons et les caches?
Jonas
11

La commande watch peut être utile. Essayez watch -n 5 freede surveiller l'utilisation de la mémoire avec des mises à jour toutes les cinq secondes.

mgunes
la source
Merci, c'était génial! Toutefois, je préférerais utiliser la mémoire sur une seule ligne, il est donc facile de se connecter à un fichier texte.
Jonas
8

Vous pouvez le faire en utilisant cat /proc/meminfo.

MemTotal:        4039160 kB
MemFree:          309796 kB
MemAvailable:    3001052 kB
Buffers:          345636 kB
Cached:          2341288 kB
SwapCached:            8 kB
Active:          1725160 kB
Inactive:        1551652 kB
Active(anon):     538404 kB
Inactive(anon):    70076 kB
Active(file):    1186756 kB
Inactive(file):  1481576 kB
Unevictable:          32 kB
Mlocked:              32 kB
SwapTotal:       4194300 kB
SwapFree:        4194044 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        589988 kB
Mapped:           255972 kB
Shmem:             18596 kB
Slab:             374888 kB
SReclaimable:     310496 kB
SUnreclaim:        64392 kB
KernelStack:        6976 kB
PageTables:        26452 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     6213880 kB
Committed_AS:    3589736 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      147392 kB
DirectMap2M:     4046848 kB
Amir
la source
1
l'ajout de la montre au début de cette commande le rend génial! comme danswatch cat /proc/meminfo
Elder Geek
La freecommande prend ses informations /proc/meminfoet les présente de manière compacte. Utiliser free -hpour une sortie lisible par l'homme.
LoMaPh
4

Pour la surveillance visuelle de l’utilisation globale de la mémoire RAM, si vous utilisez Byobu , votre utilisation de la mémoire sera conservée dans le coin inférieur droit du terminal et sera exécutée pendant toute session de terminal.

Comme vous pouvez le voir sur la capture d'écran, ma machine virtuelle dispose d'un temps d'activité de 1h3m, de 0.00 charge, d'un processeur de 2.8GHz (virtuel) et de 994 Mo (21%) de la RAM disponible du système.

Byobu en cours d'utilisation

bafromca
la source
3

Solution monoligne et sortie:

free -m | grep "Mem:"

Voici un exemple du résultat attendu:

Mem:           3944         652         302          18        2990        2930
Tim
la source
1

Je voudrais utiliser des cactus . Cela va représenter graphiquement votre utilisation de la mémoire, etc. sur une période de temps, et vous pourrez vérifier son utilisation en utilisant votre navigateur Web.

Mat
la source
1

Contrôle de l'utilisation de la mémoire

Je suis plus en ligne avec l'un des messages précédents qui ont mentionné Cacti comme un excellent moyen de surveiller l'utilisation de la mémoire. Cependant, comme il semble que les cactus ne sont plus populaires dans le monde traditionnel, il existe une application graphique alternative appelée Graphite.

Graphite est relativement facile à installer sur un serveur Ubuntu et, pour l'installer, vous pouvez consulter ce lien pour en savoir plus sur les procédures d'installation.

Une fois le graphite installé, vous pouvez maintenant lui envoyer des métriques de mémoire, à l’intervalle de votre choix. toutes les 5 secondes, toutes les minutes, toutes les heures, etc.

Pour représenter graphiquement les métriques de la mémoire, comme suggéré dans les précédents articles, vous pouvez écrire votre propre script à l'aide des outils système pour collecter les informations de mémoire nécessaires. Ou bien, vous pouvez utiliser un plugin snmp pré-écrit qui fera tout le travail à votre place.

Si vous souhaitez écrire votre propre script de mémoire, il est judicieux de vous assurer que vous tenez compte de la mémoire tampon et de la mémoire cache lors du calcul de la mémoire utilisée, sinon vous finirez par collecter de fausses données.

Si vous souhaitez plutôt utiliser un plugin snmp qui effectue déjà tous les calculs nécessaires, voici un lien vers celui qui fonctionne assez bien: checkMemoryviaSNMP .

Avantages de SNMP:

J'ai snmp installé sur tous les nœuds distants que je surveille. Cela me permet de surveiller tous mes systèmes depuis un ou plusieurs serveurs centraux , sans avoir à copier ou à mettre un plugin sur les nœuds distants.

Inconvénients de SNMP:

Vous devez vous assurer que l' agent snmp est installé sur chacun des nœuds distants sur lesquels vous souhaitez surveiller la mémoire. Cependant, cette installation sera une affaire unique. Si vous utilisez des outils d'automatisation tels que chef ou marionnette ou des outils similaires dans votre environnement, ce n'est pas un problème du tout.

Configuration de l'agent SNMP sur le ou les nœuds distants:

Une fois l’agent snmp installé, passez simplement le fichier /etc/snmpd/snmpd.conf et ajoutez-y cette ligne:

rocommunity  (specify-a-community-string-aka-password-here)

Puis redémarrez l'agent snmpd avec:

/etc/init.d/snmpd restart

Ensuite, sur votre serveur central, à partir duquel vous surveillez tous vos autres serveurs, vous pouvez exécuter la commande suivante:

$ time ./checkMemoryviaSNMP -v2 public gearman001.phs.blah.com 30 90 graphite,10.10.10.10,2003,typical
WARNING: Used = [ 3.26154 GB ], Installed = [ 5.71509 GB ], PCT.Used = [ 57.069% ], Available.Memory = [ 2.00291 GB ]. Buffer = [ 137.594 MB ], Cached = [ 1.3849 GB ]. Thresholds: [ W=(30%) / C=(90%) ].  System Information = [ Linux gearman001.phs.blah.com 2.6.32-504.30.3.el6.x86_64 #1 SMP Thu Jul 9 15:20:47 EDT 2015 x86_64 ].

real    0m0.23s
user    0m0.03s
sys     0m0.02s
Vitesse simpliste
la source