J'ai un serveur avec 12G de mémoire. Un fragment de haut 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
montre 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: comment savoir quel processus consomme le plus de mémoire?
Tout comme les informations d'arrière-plan, le système fonctionne 64bit OpenSuse 12
.
Réponses:
Tout d'abord, répétez ce mantra pendant un petit moment: "la mémoire inutilisée est une mémoire gaspillée". Le noyau Linux conserve d' énormes quantités de métadonnées de fichiers et de fichiers qui ont été demandés, jusqu'à ce que quelque chose qui semble plus important repousse ces données. C'est pourquoi vous pouvez exécuter:
et faire
find
exécuter la deuxième instance à une vitesse ridicule.Linux ne laisse qu'un peu de mémoire «libre» pour gérer les pics d'utilisation de la mémoire sans trop d'effort.
Deuxièmement, vous voulez trouver les processus qui mangent toute votre mémoire; in
top
use theM
command to sort by memory memory. N'hésitez pas à ignorer laVIRT
colonne, qui vous indique simplement combien de mémoire virtuelle a été allouée, pas la quantité de mémoire utilisée par le processus.RES
signale la quantité de mémoire résidente ou actuellement dans la mémoire RAM (par opposition au swap sur disque ou jamais réellement alloué en premier lieu, malgré la demande).Mais, puisque
RES
comptera par exemple la/lib/libc.so.6
mémoire une fois pour presque tous les processus, ce n'est pas exactement une mesure impressionnante de la quantité de mémoire qu'un processus utilise. LaSHR
colonne indique la quantité de mémoire partagée avec d'autres processus, mais rien ne garantit qu'un autre processus partage réellement - il pourrait être partageable, mais personne d'autre ne veut le partager.L'
smem
outil est conçu pour aider les utilisateurs à mieux évaluer la quantité de mémoire qui doit vraiment être attribuée à chaque processus individuel. Il fait un travail intelligent pour comprendre ce qui est vraiment unique, ce qui est partagé et correspond proportionnellement à la mémoire partagée aux processus qui la partagent.smem
peut vous aider à mieux comprendre où va votre mémoiretop
, maistop
c'est un excellent premier outil.la source
/proc/meminfo
et/proc/slabinfo
détaillent à quoi le noyau utilise le stockage - leslabtop
programme est très similairetop
, mais montre à quels allocateurs de dalles ont alloué combien, à quoi ressemblent leurs ratios, etc.utiliser un conseil rapide en utilisant la commande top sous linux / unix
puis appuyez sur Shift+ m(c'est-à-dire écrire un capital
M
).De
man top
Ou bien: appuyez sur Shift+ f, puis choisissez l'affichage à commander en fonction de l'utilisation de la mémoire en appuyant sur la touche npuis appuyez sur Enter. Vous verrez le processus actif trié par utilisation de la mémoire
la source
M
(Shift
+m
)top -o mem -O cpu
top -o RES
autrement de "nom de champ non reconnu 'mem'"(Ajout d'un indicateur numérique -n à la commande de tri.)
la source
ps aux --sort '%mem'
comme expliqué dans ma réponseVous devez d'abord lire une explication sur la sortie de
free
. Conclusion: vous disposez d'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 pourrons peut-être vous aider davantage :-)
la source
Lister et trier les processus par utilisation de la mémoire:
la source
ps -e -orss=,args= | sort -nr | head
ps aux --sort '%mem'
à partir du ps de procps (par défaut sur Ubuntu 12.04) génère une sortie comme:
Donc, ici, Firefox est le premier consommateur avec 16% de ma mémoire.
Vous pourriez également être intéressé par:
la source
vous pouvez spécifier la colonne sur laquelle trier, en procédant comme suit:
la source
Vous pouvez voir l'utilisation de la mémoire en exécutant ce code dans votre terminal:
la source
Comment totaliser la mémoire utilisée par nom de processus:
Parfois, même en regardant les plus gros processus, il reste encore beaucoup de mémoire utilisée. Pour vérifier s'il y a beaucoup des mêmes processus plus petits utilisant la mémoire, vous pouvez utiliser une commande comme la suivante qui utilise awk pour résumer la mémoire totale utilisée par les processus du même nom:
par exemple sortie
la source
Cette deuxième fois
Mise à jour en continu
J'ai également ajouté quelques goodies ici que vous pourriez apprécier (ou que vous pourriez ignorer)
-n 1
regarder et mettre à jour chaque seconde-U $(whoami)
Pour afficher uniquement vos processus. $ (une commande) évalue maintenant| head -n4
Pour afficher uniquement l'en-tête et 3 processus à la fois, il suffit souvent de disposer d'éléments de campagne à forte utilisation${1-4}
dit mon premier argument,$1
je veux passer à 4 par défaut, sauf si je le fournisSi vous utilisez un Mac, vous devrez peut-être installer Watch First Brew Installer Watch
Vous pouvez également utiliser une fonction
la source
-m
en-r
Vous avez cette commande simple:
la source