La réponse de @ user26528 ne calcule pas tout à fait correctement la mémoire - vous avez besoin de la somme des mappages dans smaps, pas seulement 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
ps ef -o command,vsize,rss,%mem,size
Je n'ai pas trouvé d'option pour la mémoire partagée, mais j'ai trouvé des options pour % de la mémoire physique totale et la quantité d'espace d'échange qui serait nécessaire pour échanger le processus. Ceci et bien plus encore est documenté dans la page de manuel de ps.
Lister les processus par utilisation de la mémoire
ps -e -orss=,args=| trier -b -k1,1n