Angenommen, ich habe 20 Benutzer auf meiner Linux-Box angemeldet. Woher weiß ich, wie viel Speicher jeder von ihnen verwendet?
20
Sie können versuchen, smem zu verwenden ( weitere Informationen finden Sie in ELC2009: Visualisieren der Speichernutzung mit smem ). Insbesondere sudo smem -u
sollten Sie die gewünschten Informationen geben.
--no-install-recommends
.Wenn Sie Probleme mit dem gemeinsamen Speicher ignorieren, finden Sie hier ein schnelles Skript, mit dem Sie RSS und VMEM für alle angemeldeten Benutzer anzeigen können, die nach VMEM sortiert und in hübsche Spalten unterteilt sind:
quelle
Um die Summe der RSS zu bekommen, denke ich, dass die folgenden Arbeiten. Dies wäre, um die Summe der RSS für die Benutzer kbrandt und root zu erhalten.
quelle
Das ist eine knifflige Frage. Sie könnten leicht die gesamten RSS + Swap-Beträge in der "ps" -Ausgabe zusammenfassen, aber was ist mit Shared Memory? Verschiedene Benutzer können problemlos dieselbe Codepage verwenden, wenn sie denselben Prozess ausführen. Wem erklären Sie das? Was ist mit Puffern und Cache? Es hängt wirklich davon ab, wie genau Ihre Ergebnisse sein sollen. Je genauer Sie wollen, desto schwieriger wird es.
quelle
Ich bin mir nicht sicher, wie ich die Speichernutzung durch Benutzer melden soll. Wenn Sie jedoch Bedenken haben, die Speichernutzung zu kontrollieren, sollten Sie ulimit nachschlagen. Hiermit können Sie pro Benutzer / Gruppe Hard- und Soft-Limits für den Arbeitsspeicher und andere Ressourcen auf Ihrem System festlegen.
quelle
Sie können versuchen, etwas wie:
quelle
ps aux | grep mysql | awk '{memory +=$4}; END {print memory }'
, wobei mysql durch den Namen eines Benutzers oder Prozesses ersetzt werden könnte.Auf der Suche nach dem Gleichen habe ich das herausgefunden
Um nach mem geordnete Prozesse zu drucken, die nach Benutzer gruppiert sind (Spalte 1, $ 1), können Sie nach anderen Dingen gruppieren und andere Dinge summieren, indem Sie $ 1 und $ 4 ändern
Ich war froh, die Lösung zu finden, wollte nur teilen.
quelle
ps --no-headers -eo user,rss | awk '{arr[$1]+=$2}; END {for (i in arr) {print i,arr[i]}}' | sort -nk2
. Der Sortierbefehl benötigt das-n
Flag, damit der Speicher als Zahl analysiert wird. Auch auf diese Weise können Sie das Wort "Benutzer" durch "Befehl" ersetzen, um stattdessen nach Anwendungsnamen zu gruppieren.Dieses Bash-Skript ist wahrscheinlich höllisch hässlich, aber danke für die Übung, meine Bash wurde (wird) rostig!
Ergebnis:
Bitte kommentieren / korrigieren und ich werde die Antwort aktualisieren. Außerdem verwende ich die RSS-Speicherausgabe von PS, da andere diskutiert haben, dass es Vor- / Nachteile gibt, diesen Wert zu verwenden.
quelle
smem war auf meinem System nicht verfügbar und Daves Skript funktionierte aus irgendeinem Grund nicht. Deshalb habe ich diesen hässlichen Perl-Oneliner geschrieben, um die ps-Ausgabe zu verarbeiten:
Beachten Sie, dass einige Benutzer anhand ihrer UID und nicht anhand ihres Benutzernamens identifiziert wurden. Sie könnten damit umgehen, indem Sie Benutzernamen aus / etc / passwd mit dem folgenden Befehl analysieren:
quelle
Verwenden von Bash Script
AUSGABE
quelle
Sie können die UIDs von abrufen
/etc/passwd
, um dies für alle Benutzer zu tunquelle
Nun, in diesem Zustand des Linux-Kernels fällt mir nur einer ein richtigen Weg vorstellen, um diese Aufgabe zu erfüllen - die Verwendung von Speicher-Cgroups. Sie müssten einen Benutzer bei der Anmeldung in eine eigene C-Gruppe einbinden, was möglicherweise die Entwicklung eines eigenen Pam-Moduls oder (eher) die Änderung eines vorhandenen Moduls erfordert.
Ein nützliches Dokument zum Lesen ist: Resource Management Guide von RedHat®.
quelle