Dieser Einzeiler hat für mich auf mindestens vier verschiedenen Linux-Systemen mit unterschiedlichen Distributionen und Versionen funktioniert. Es funktionierte auch unter FreeBSD 10.
ps hax -o rss,user | awk '{a[$2]+=$1;}END{for(i in a)print i" "int(a[i]/1024+0.5);}' | sort -rnk2
Zur Implementierung gibt es hier keine Shell-Loop-Konstrukte; dies verwendet ein assoziatives Array in awk
um die Gruppierung und Summierung durchzuführen.
Hier ist eine Beispielausgabe von einem meiner Server, auf dem MySQL, Tomcat und Apache von angemessener Größe ausgeführt werden. Die Zahlen sind in MB.
mysql 1566
joshua 1186
tomcat 353
root 28
wwwrun 12
vbox 1
messagebus 1
avahi 1
statd 0
nagios 0
Vorbehalt:Wie die meisten ähnlichen Lösungen berücksichtigt dies nur den residenten Satz (RSS), sodass keine Shared-Memory-Segmente gezählt werden.
BEARBEITEN :Eine besser lesbare Version.
echo "USER RSS PROCS" ; echo "-------------------- -------- -----" ; ps hax -o rss,user | awk '{rss[$2]+=$1;procs[$2]+=1;}END{for(user in rss) printf "%-20s %8.0f %5.0f\n", user, rss[user]/1024, procs[user];}' | sort -rnk2
Und die Ausgabe:
USER RSS PROCS
-------------------- -------- -----
mysql 1521 1
joshua 1120 28
tomcat 379 1
root 19 107
wwwrun 10 10
vbox 1 3
statd 1 1
nagios 1 1
messagebus 1 1
avahi 1 1
Speichernutzung pro Benutzer in Prozent mit Standardtools:
for _user in $(ps haux | awk '{print $1}' | sort -u)
do
ps haux | awk -v user=${_user} '$1 ~ user { sum += $4} END { print user, sum; }'
done
oder für mehr Präzision:
TOTAL=$(free | awk '/Mem:/ { print $2 }')
for _user in $(ps haux | awk '{print $1}' | sort -u)
do
ps hux -U ${_user} | awk -v user=${_user} -v total=$TOTAL '{ sum += $6 } END { printf "%s %.2f\n", user, sum / total * 100; }'
done
Die erste Version summiert nur den Speicherprozentsatz für jeden Prozess, wie von ps
gemeldet . Die zweite Version summiert stattdessen den Speicher in Bytes und berechnet anschließend den Gesamtprozentsatz, was zu einer höheren Genauigkeit führt.
Wenn Ihr System dies unterstützt, versuchen Sie, smem zu installieren und zu verwenden:
smem -u
User Count Swap USS PSS RSS
gdm 1 0 308 323 820
nobody 1 0 912 932 2240
root 76 0 969016 1010829 1347768
oder
smem -u -t -k
User Count Swap USS PSS RSS
gdm 1 0 308.0K 323.0K 820.0K
nobody 1 0 892.0K 912.0K 2.2M
root 76 0 937.6M 978.5M 1.3G
ameskaas 46 0 1.2G 1.2G 1.5G
124 0 2.1G 2.2G 2.8G
In Ubuntu kann smem durch Eingabe von
installiert werdensudo apt install smem