Anzeigen der zusammenfassenden Speichernutzung von Befehlsgruppen (anstelle von Prozessen)

9

Gibt es eine Möglichkeit, ähnliche Prozesse zu gruppieren, wenn Tools wie top / htop verwendet werden? Manchmal möchte ich nur wissen, was mein Gedächtnis beansprucht, und einige Programme (meistens Browser) verwenden mehrere Prozesse, was es schwierig macht zu lesen, wie viel RAM sie tatsächlich verwenden.

Bisher habe ich mir nur so etwas ausgedacht:

ps ax -o pmem,cmd | grep opera | grep -oE '^[ ]*[0-9.]+' | paste -sd+ - | bc
korda
quelle

Antworten:

6

Sie können ps -Cnur Prozessinformationen für einen bestimmten Befehlsnamen anzeigen.

z.B

ps -C opera

Sie können dann andere psOptionen verwenden, um nur die Daten zu extrahieren, nach denen Sie suchen. Insbesondere hoder --no-headersum die Spaltenüberschriften zu unterdrücken und -o pmemden Prozentsatz des vom Prozess verwendeten Speichers anzuzeigen.

ps -C opera --no-headers -o pmem

Dadurch erhalten Sie eine Reihe von Prozentsätzen für die Speichernutzung, einen pro Zeile.

Es gibt zahlreiche Methoden zum Summieren solcher Daten. Eine der Methoden, die ich häufig verwende, besteht darin, sie in xargs zu leiten, um sie in eine Zeile mit durch Leerzeichen begrenzten Elementen umzuwandeln, dann in sed, um Leerzeichen in +Symbole umzuwandeln , und dann in bc, um die Daten auszuführen Berechnung. Ihre Methode der Rohrleitung paste -sd+funktioniert genauso gut oder wohl besser als | xargs | sed.

Wenn Sie das alles zusammenfassen, erhalten Sie:

ps -C opera --no-headers -o pmem | xargs | sed -e 's/ /+/g' | bc

oder

ps -C opera --no-headers -o pmem | paste -sd+ | bc

Mit anderen Worten, Sie können ps -Canstelle mehrerer Greps verwenden, wenn Sie nur Daten zu einem bestimmten laufenden Programm wünschen.

HINWEIS: Sie können mehrere -COptionen in derselben Befehlszeile verwenden, wenn Sie Informationen zu mehr als einem Programm gleichzeitig wünschen. z.B

ps -C iceweasel -C chromium -C opera
cas
quelle
Ja, erste Person, die meine Frage tatsächlich verstanden / gelesen hat!
Gordon
Das einzige Problem, das ich bei diesem Ansatz sehe, ist, dass einige Programme denselben Befehl haben und ich sie dennoch nicht gruppieren möchte (zum Beispiel Java ... und da ich Java-Entwickler bin, laufen normalerweise mindestens ein paar Java-Programme). Ich denke, es gibt keine perfekte Lösung ...
korda
Es gibt immer ps h -C java -o pmem,args | awk '/foo/ {print $1}' | ...zB nach einem Java-Programm namens foo zu suchen.
Cas
0

Sie können ein Shell-Skript erstellen

#!/bin/bash
Total=`cat /proc/meminfo | head -n1 | awk '{print $2}'`
max_usage=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $1}'`
name=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $NF}'`
echo "$Total $max_usage $name"
echo "($max_usage*$Total)/(100*1024)" | bc

Dies ergibt die Anwendung mit der höchsten Mem-Nutzung.

RahulAN
quelle
Ich habe versucht, dies zum Laufen zu bringen, und es hat mir keine interessanten Ergebnisse gebracht. Zum Beispiel zeigt es nur ein Programm, und es ist nicht dasjenige, das den größten Teil des Speichers
beansprucht
Ist es? Na willst du was wie top ?? Wenn ja, können Sie das Skript mit einer Verzögerung von 2 oder 1 Sek. ändern und das Gleiche in einiger Zeit oder für eine Weile ausführen. Für mich zeigt es die Anwendung mit der höchsten Speichernutzung zum Zeitpunkt der Ausführung dieses Skripts. Welche Art von Sachen Sie versuchen, führen Sie einfach aus: ps af -o pmem, cmd | sort -r Es gibt Ihnen die Anwendung mit der höchsten Mem-Nutzung
RahulAN
Es funktioniert nicht für mich. Ich denke, der Grund ist, dass die Sorte führende Leerzeichen enthält
korda
Du meinst, du bekommst nicht den richtigen Namen des Prozesses?
RahulAN
Ja, weil ps Leerzeichen zum Einrücken hinzufügen. Wenn ein Prozess eine zweistellige Verwendung hat, werden einstellige Verwendungswerte eingerückt und beginnen mit einem führenden Leerzeichen. Ich denke, etwas hinzuzufügen sed -e 's/^[[:space:]]*//'sollte es beheben. Addiert Ihr Skript auch die Speichernutzung von Prozessen mit demselben Befehl?
Gordon
0

Von innen oben können Sie Folgendes verwenden:

Press SHIFT+f
Press the Letter corresponding to %MEM
Press ENTER

Sie könnten auch versuchen:

ps -eo pmem,pcpu,vsize,pid,cmd | sort -k 1 -nr | head -5

Dieser Befehl gibt die Top 5 Prozesse nach Speichernutzung an.

Ich hoffe, Sie finden diese Informationen hilfreich!

Paul
quelle
0

Dies kann mit termql vereinfacht werden .

ps -C chromium-browser -o pmem | termsql -1 "SELECT SUM([%MEM]) FROM tbl"

Beachten Sie, dass es derzeit nicht auf PyPI hochgeladen wird und auch nur systemweit installiert werden kann ( setup.pyist ein wenig kaputt), wie z sudo pip install https://github.com/tobimensch/termsql/archive/master.zip.

saaj
quelle