Sous Linux, comment puis-je afficher l'utilisation de la mémoire de chaque processus si je crée un ps -ef
? Je voudrais voir la "mémoire virtuelle", "mémoire en mémoire", "mémoire partagée" de chaque progrès. Je peux obtenir cela via top
, mais je veux les mêmes informations dans ps -ef
afin de pouvoir diriger la sortie vers grep
avec le nom de mon processus.
Obtenir l'utilisation de la mémoire via ps est assez peu fiable. Si vous avez un noyau plus récent, il devrait prendre en charge/proc/pid #/smaps, qui fournit des informations détaillées sur l'utilisation de la mémoire de chaque processus. Vous trouverez ci-dessous un script assez sale et rapide permettant de parcourir chaque processus ouvert et de saisir les utilisations Size, Rss, Pss et Shared Clean/Dirty. Espérons que cela puisse être utile d'une certaine manière.
#!/bin/bash
for pid in $(ps -ef | awk '{print $2}'); do
if [ -f /proc/$pid/smaps ]; then
echo "* Mem usage for PID $pid"
echo "-- Size:"
cat /proc/$pid/smaps | grep -m 1 -e ^Size: | awk '{print $2}'
echo "-- Rss:"
cat /proc/$pid/smaps | grep -m 1 -e ^Rss: | awk '{print $2}'
echo "-- Pss:"
cat /proc/$pid/smaps | grep -m 1 -e ^Pss: | awk '{print $2}'
echo "Shared Clean"
cat /proc/$pid/smaps | grep -m 1 -e '^Shared_Clean:' | awk '{print $2}'
echo "Shared Dirty"
cat /proc/$pid/smaps | grep -m 1 -e '^Shared Dirty:' | awk '{print $2}'
fi
done
ps ef -o command,vsize,rss,%mem,size
Je ne pouvais pas trouver d’option pour la mémoire partagée, mais j’avais trouvé des options pour le% de la mémoire physique totale et la quantité d’espace de swap nécessaire pour échanger le processus. Ceci et bien d’autres sont documentés dans la page de manuel de ps.
La réponse de @ user26528 ne calcule pas correctement la mémoire - vous avez besoin de la somme des mappages dans les smaps, pas seulement celle du haut. Ce script devrait le faire:
#!/bin/bash
for pid in $(ps -ef | awk '{print $2}'); do
if [ -f /proc/$pid/smaps ]; then
echo "* Mem usage for PID $pid"
rss=$(awk 'BEGIN {i=0} /^Rss/ {i = i + $2} END {print i}' /proc/$pid/smaps)
pss=$(awk 'BEGIN {i=0} /^Pss/ {i = i + $2 + 0.5} END {print i}' /proc/$pid/smaps)
sc=$(awk 'BEGIN {i=0} /^Shared_Clean/ {i = i + $2} END {print i}' /proc/$pid/smaps)
sd=$(awk 'BEGIN {i=0} /^Shared_Dirty/ {i = i + $2} END {print i}' /proc/$pid/smaps)
pc=$(awk 'BEGIN {i=0} /^Private_Clean/ {i = i + $2} END {print i}' /proc/$pid/smaps)
pd=$(awk 'BEGIN {i=0} /^Private_Dirty/ {i = i + $2} END {print i}' /proc/$pid/smaps)
echo "-- Rss: $rss kB"
echo "-- Pss: $pss kB"
echo "Shared Clean $sc kB"
echo "Shared Dirty $sd kB"
echo "Private $(($pd + $pc)) kB"
fi
done
Lister les processus par utilisation de la mémoire
ps -e -orss =, args = | trier -b -k1,1n
vous pouvez utiliser
top -n 1
J'ai constaté que plusieurs fois le même processus a un processus secondaire et que vous êtes intéressé par la mémoire totale utilisée par le processus. par exemple. google chrome démarre plusieurs processus et vous souhaitez connaître la quantité totale de mémoire utilisée par chrome. J'ai trouvé ci-dessous une commande très utile
echo "%CPU %MEM MEM PROCESS"
ps aux | awk '{mem[$11]+=int($6/1024)}; {cpuper[$11]+=$3};{memper[$11]+=$4}; END {for (i in mem) {print cpuper[i]"% ",memper[i]"% ",mem[i]" MB ",i}}' | sort -k3nr | head -n 5
Il s’occupe de beaucoup de choses, comme l’affichage de la mémoire en Mo, le tri sur la mémoire et principalement le regroupement par commande. Il regroupe également% CPU et% mémoire. Il montre les données dans un format convivial.
Cette commande a été inspirée par cette réponse et m'a beaucoup aidé à avoir une idée du processus qui utilise mes ressources.
Mettre à jour:
La ligne suivante fournit également des informations sur la consommation totale de mémoire de l'utilisateur actuel.
echo "------------------------------------" && mem=0 && while read -r rss comm ; do mbs=$((rss/1024)); mem=$((mbs + mem)); echo $mbs"MB - $comm"; done <<< "$(ps -u $USER -wo rss=,comm= --sort -rss)" && echo "------------------------------------" && echo $mem"MB: Memory used by user '$USER'"
Je viens d'énumérer tous les processus utilisateur triés par la plus grande utilisation de la mémoire en Mo, comme ceci:
ps -u $USER -wo rss=,comm= --sort -rss | while read -r rss comm ; do echo $((rss/1024))"MB -" $comm; done
Vous pouvez utiliser command=
au lieu de comm=
pour afficher le processus de chemin complet.
Le =
supprime simplement le titre de la colonne.
Liste des processus par utilisation de mem
commande: ps -e -orss =, args = | trier -b -k1,1n | pr -TW $ COLONNES \