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
.
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.
utilisez la pointe en utilisant top commande dans linux/unix
$ top
et ensuite frappé Shift+m (c’est-à-dire écrire une majuscule M
name__).
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
ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 10
(Ajout de l'indicateur numérique -n à la commande de tri.)
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 :-)
Répertorier et trier les processus par mémoire
ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS
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
Vous pouvez voir l'utilisation de la mémoire en exécutant ce code dans votre terminal:
$ watch -n2 free -m
$ htop
Vous avez cette commande simple:
$ free -h