Die Antwort von @ user26528 berechnet den Speicher nicht ganz richtig - Sie benötigen die Summe der Zuordnungen in Smaps, nicht nur die oberste. Dieses Skript sollte es tun:
#!/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
Ich konnte keine Option für gemeinsam genutzten Speicher finden, aber ich habe Optionen für % des gesamten physischen Speichers und die Menge an Auslagerungsspeicher gefunden, die zum Auslagern des Prozesses erforderlich wäre. Dies und vieles mehr ist in der Manpage für ps dokumentiert.
Prozesse nach Speicherverbrauch auflisten
ps -e -orss=,args=| sortieren -b -k1,1n