web-dev-qa-db-fra.com

Comment voir les principaux processus triés par utilisation réelle de la mémoire?

J'ai un serveur avec 12G de mémoire. Un fragment de top est montré ci-dessous:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                                                                                                      
12979 frank  20   0  206m  21m  12m S   11  0.2  26667:24 krfb                                                                                                                                                                                                                                                          
13 root      15  -5     0    0    0 S    1  0.0  36:25.04 ksoftirqd/3                                                                                                                                                                                                                                                   
59 root      15  -5     0    0    0 S    0  0.0   4:53.00 ata/2                                                                                                                                                                                                                                                         
2155 root      20   0  662m  37m 8364 S    0  0.3 338:10.25 Xorg                                                                                                                                                                                                                                                          
4560 frank  20   0  8672 1300  852 R    0  0.0   0:00.03 top                                                                                                                                                                                                                                                           
12981 frank  20   0  987m  27m  15m S    0  0.2  45:10.82 amarok                                                                                                                                                                                                                                                        
24908 frank  20   0 16648  708  548 S    0  0.0   2:08.84 wrapper                                                                                                                                                                                                                                                       
1 root      20   0  8072  608  572 S    0  0.0   0:47.36 init                                                                                                                                                                                                                                                          
2 root      15  -5     0    0    0 S    0  0.0   0:00.00 kthreadd

Le free -m indique ce qui suit:

             total       used       free     shared    buffers     cached
Mem:         12038      11676        362          0        599       9745
-/+ buffers/cache:       1331      10706
Swap:         2204        257       1946

Si je comprends bien, le système ne dispose que de 362 Mo de mémoire disponible. Ma question est la suivante: comment savoir quel processus consomme le plus de mémoire?

Tout comme les informations d’arrière-plan, le système exécute 64bit OpenSuse 12.

219
user3111525

Tout d’abord, répétez ce mantra un petit moment: "la mémoire non utilisée est une mémoire perdue". Le noyau Linux conserve environ énormes quantités de métadonnées et de fichiers demandés, jusqu'à ce que quelque chose de plus important que ce soit supprime ces données. C'est pourquoi vous pouvez courir:

find /home -type f -name '*.mp3'
find /home -type f -name '*.aac'

et que la deuxième instance find soit exécutée à une vitesse ridicule.

Linux ne laisse qu'un peu de mémoire «libre» pour gérer les pointes d'utilisation de la mémoire sans trop d'effort.

Deuxièmement, vous voulez trouver les processus qui consomment toute votre mémoire; dans top, utilisez la commande M pour trier par utilisation de la mémoire. N'hésitez pas à ignorer la colonne VIRT, qui indique uniquement la quantité de mémoire virtuelle allouée, et non la quantité de mémoire utilisée par le processus. RES indique combien de mémoire est résident, ou actuellement en mémoire vive (par opposition à permuté sur disque ou jamais alloué réellement, bien qu'il ait été demandé).

Mais, puisque RES comptera par exemple /lib/libc.so.6 mémoire une fois pour presque chaque processus, il ne s'agit pas d'une mesure impressionnante de la quantité de mémoire utilisée par un processus. La colonne SHR indique la quantité de mémoire partagée avec d'autres processus, mais rien ne garantit qu'un autre processus est réellement en train de partager - il peut être partagé, mais personne d'autre ne veut partager.

L'outil smem est conçu pour aider les utilisateurs à mieux évaluer la quantité de mémoire à attribuer vraiment à chacun des processus. Il fait un travail intelligent pour déterminer ce qui est vraiment unique, ce qui est partagé et compense proportionnellement la mémoire partagée aux processus qui la partagent. smem peut vous aider à comprendre où va votre mémoire mieux que top, mais top est un excellent premier outil.

271
sarnold

utilisez la pointe en utilisant top commande dans linux/unix

$ top

et ensuite frappé Shift+m (c’est-à-dire écrire une majuscule Mname__).

De man top

SORTING of task window
  For compatibility, this top supports most of the former top sort keys.
  Since this is primarily a service to former top users, these commands do
  not appear on any help screen.
    command   sorted-field                  supported
      A         start time (non-display)      No
      M         %MEM                          Yes
      N         PID                           Yes
      P         %CPU                          Yes
      T         TIME+                         Yes

Ou alternativement: hit Shift + f , puis choisissez l’affichage à classer par utilisation de la mémoire en appuyant sur la touche n puis appuyez Enter. Vous verrez le processus actif ordonné par l'utilisation de la mémoire

307
risnandar
ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 10

(Ajout de l'indicateur numérique -n à la commande de tri.)

35
Angelinux

Commencez par lire une explication sur la sortie de free . En bout de ligne: vous avez au moins 10,7 Go de mémoire facilement utilisable par les processus.

Ensuite, vous devez définir ce qu'est "l'utilisation de la mémoire" pour un processus (ce n'est pas facile ou sans ambiguïté, croyez-moi).

Ensuite, nous pourrions peut-être aider davantage :-)

28
thkala

Répertorier et trier les processus par mémoire

ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS
20
Tomir Schmite Jr.

ps aux --sort '%mem'

from procps 'ps (par défaut sur Ubuntu 12.04) génère une sortie comme:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
...
Tomcat7   3658  0.1  3.3 1782792 124692 ?      Sl   10:12   0:25 /usr/lib/jvm/Java-7-Oracle/bin/Java -Djava.util.logging.config.file=/var/lib/Tomcat7/conf/logging.properties -D
root      1284  1.5  3.7 452692 142796 tty7    Ssl+ 10:11   3:19 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
ciro      2286  0.3  3.8 1316000 143312 ?      Sl   10:11   0:49 compiz
ciro      5150  0.0  4.4 660620 168488 pts/0   Sl+  11:01   0:08 Unicorn_Rails worker[1] -p 3000 -E development -c config/Unicorn.rb             
ciro      5147  0.0  4.5 660556 170920 pts/0   Sl+  11:01   0:08 Unicorn_Rails worker[0] -p 3000 -E development -c config/Unicorn.rb             
ciro      5142  0.1  6.3 2581944 239408 pts/0  Sl+  11:01   0:17 sidekiq 2.17.8 gitlab [0 of 25 busy]                                                                          
ciro      2386  3.6 16.0 1752740 605372 ?      Sl   10:11   7:38 /usr/lib/firefox/firefox

Donc ici Firefox est le plus gros consommateur avec 16% de ma mémoire.

Vous pouvez également être intéressé par:

ps aux --sort '%cpu'

vous pouvez spécifier la colonne à trier en procédant comme suit:

 étapes: 
 * top 
 * shift + F 
 * sélectionner une colonne de la liste 
 par exemple. n signifie trier par mémoire, 
 * appuyez sur enter 
 * ok 
4
Eric Wang

Vous pouvez voir l'utilisation de la mémoire en exécutant ce code dans votre terminal:

$ watch -n2 free -m
$ htop
1
Cubiczx

Vous avez cette commande simple: 

$ free -h
0
Christian IC