it-swarm.com.de

Wie kann ich die Speichernutzung jedes Prozesses anzeigen, wenn ich ein 'ps -ef' mache?

Wie kann ich unter Linux die Speichernutzung jedes Prozesses anzeigen, wenn ich einen ps -ef mache? Ich würde gerne die "virtuellen Speicher", "res Speicher", "Shared Memory" von jedem Fortschritt sehen. Ich kann das über top bekommen, aber ich möchte die gleichen Informationen in ps -ef, damit ich die Ausgabe mit meinem Prozessnamen an grep leiten kann.

23
hap497

Die Speicherauslastung über ps zu ermitteln, ist ziemlich unzuverlässig. Wenn Sie einen neueren Kernel haben, sollte dieser/proc/pid #/smaps unterstützen, was Ihnen einige detaillierte Informationen zur Speichernutzung jedes Prozesses gibt. Im Folgenden finden Sie ein ziemlich unsauberes und schnelles Skript, mit dem Sie alle offenen Prozesse durchlaufen und die Verwendung von Size, Rss, Pss und Shared Clean/Dirty ermitteln können. Hoffentlich kann es in irgendeiner Weise nützlich sein.

#!/bin/bash

for pid in $(ps -ef | awk '{print $2}'); do
    if [ -f /proc/$pid/smaps ]; then
            echo "* Mem usage for PID $pid"
            echo "-- Size:"
            cat /proc/$pid/smaps | grep -m 1 -e ^Size: | awk '{print $2}'
            echo "-- Rss:"
            cat /proc/$pid/smaps | grep -m 1 -e ^Rss: | awk '{print $2}'
            echo "-- Pss:"
            cat /proc/$pid/smaps | grep -m 1 -e ^Pss: | awk '{print $2}'
            echo "Shared Clean"
            cat /proc/$pid/smaps | grep -m 1 -e '^Shared_Clean:' | awk '{print $2}'
            echo "Shared Dirty"
            cat /proc/$pid/smaps | grep -m 1 -e '^Shared Dirty:' | awk '{print $2}'
    fi
done
8
user26528

ps ef -o command,vsize,rss,%mem,size

Ich konnte keine Option für den gemeinsam genutzten Speicher finden, habe jedoch Optionen für% des gesamten physischen Speichers und die Menge an Swapspace gefunden, die zum Auslagern des Prozesses erforderlich wäre. Dies und vieles mehr ist in der Manpage für ps dokumentiert.

11
Justin Smith

Die Antwort von @ user26528 berechnet den Speicher nicht 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
9
evsmith

Listen Sie Prozesse nach Speichernutzung auf

ps -e -orss =, args = | sort -b -k1,1n

8
vasily-vm

sie können verwenden

top -n 1
4
Am.

Ich habe festgestellt, dass ein und derselbe Prozess einen Fork-Sub-Prozess hat und Sie sich für den vom Prozess verwendeten Gesamtspeicher interessieren. z.B. google chrome startet mehrere prozesse und sie möchten wissen, wie viel speicher von chrome belegt ist. Ich fand unten einen Zeilenbefehl sehr nützlich

echo "%CPU   %MEM    MEM     PROCESS"
ps aux | awk '{mem[$11]+=int($6/1024)}; {cpuper[$11]+=$3};{memper[$11]+=$4}; END {for (i in mem) {print cpuper[i]"% ",memper[i]"% ",mem[i]" MB ",i}}' | sort -k3nr | head -n 5

Es kümmert sich um viele Dinge, wie das Anzeigen des Speichers in MB, das Sortieren nach Speicher und hauptsächlich das Gruppieren nach Befehlen. Es gruppiert auch% CPU und% Speicher. Es zeigt Daten in benutzerfreundlichem Format.

Dieser Befehl wurde von dieser Antwort inspiriert und hat mir sehr geholfen, eine Vorstellung davon zu bekommen, welcher Prozess meine Ressourcen beansprucht.

3
ashah

Aktualisieren:

Der folgende Einzeiler enthält auch Informationen zum Gesamtspeicherverbrauch des aktuellen Benutzers.

echo "------------------------------------" && mem=0 && while read -r rss comm ; do mbs=$((rss/1024)); mem=$((mbs + mem)); echo $mbs"MB - $comm"; done <<< "$(ps -u $USER -wo rss=,comm= --sort -rss)" && echo "------------------------------------" && echo $mem"MB: Memory used by user '$USER'"

Ich habe soeben alle Benutzerprozesse aufgelistet, die nach der höchsten Speichernutzung in MB sortiert sind:

ps -u $USER -wo rss=,comm= --sort -rss | while read -r rss comm ; do echo $((rss/1024))"MB -" $comm; done

Sie können command= anstelle von comm= verwenden, um den vollständigen Pfadprozess anzuzeigen.

Der = entfernt nur den Spaltentitel.

3
raratiru

Listen Sie Prozesse nach Mem-Verwendung auf

befehl: ps -e -orss =, args = | sort -b -k1,1n | pr - TW $ COLUMNS \

3
Jijo John