Maximale Speichernutzung eines Prozesses

12

Tools wie top und ps können mir die aktuell einem Prozess zugewiesene Speichermenge anzeigen. Ich bin jedoch daran interessiert, die maximale Speichermenge zu messen, die einem Prozess entweder seit seiner Erstellung oder in einem bestimmten Zeitintervall zugewiesen wurde. Irgendwelche Vorschläge, wie man es herausfindet?

Davitenio
quelle

Antworten:

22

Die maximale Speichernutzung eines bestimmten Prozesses erhalten Sie unter:

grep VmPeak /proc/$PID/status  

(Ändern Sie $ PID in die tatsächliche Prozess-ID, nach der Sie suchen.)

VmPeak ist die maximale Speichermenge, die der Prozess seit seinem Start verwendet hat.

Um die Speichernutzung eines Prozesses im Laufe der Zeit zu verfolgen, können Sie ein Tool namens munin verwenden zu verfolgen, , um den Speicher über .

Munin enthält viele Standard-Plugins zum Verfolgen von Systemressourcen, jedoch kein Plugin zum Verfolgen der maximalen Speichernutzung - zum Glück ist es extrem einfach, ein Plugin dafür zu schreiben.

Hier ist ein Beispiel eines Munin-Plugins zur Verfolgung der Speichernutzung von VmPeak, VmRSS und VmSize für den Apache-Prozess. Sie können dies an Ihre Bedürfnisse anpassen (zeigen Sie einfach auf die richtige PID-Datei und ändern Sie den Komponentennamen nach Bedarf).

Das ausgegebene Diagramm sieht folgendermaßen aus (VmPeak und VmSize sind in diesem Beispiel identisch, sodass nur eines davon angezeigt wird):

Apache Memory Usage Graph - Wird mit dem in diesem Beitrag vorgeschlagenen Plugin erstellt

Hinweis: Dies überwacht nur den Haupt-Apache-Prozess und zeigt nicht die Speichernutzung der untergeordneten Prozesse an.

#!/bin/bash
#
# Parameters:
#
#       config   (required)
#       autoconf (optional - used by munin-config)
#

COMPONENT_NAME="Apache"
COMPONENT_PID_FILE="/var/run/apache2.pid"

if [ "$1" = "autoconf" ]; then
        if [ -r /proc/stat ]; then
                echo yes
                exit 0
        else
                echo "no (/proc/stat not readable)"
                exit 1
        fi
fi

if [ "$1" = "config" ]; then   
        echo "graph_title $COMPONENT_NAME memory usage"
        echo 'graph_vlabel'
        echo "graph_category Processes"
        echo "graph_info This graph shows the amount of memory used by the $COMPONENT_NAME processes"
        echo "${COMPONENT_NAME}_vmpeak.label $COMPONENT_NAME VmPeak"
        echo "${COMPONENT_NAME}_vmsize.label $COMPONENT_NAME VmSize"
        echo "${COMPONENT_NAME}_vmrss.label $COMPONENT_NAME VmRSS"
        echo 'graph_args --base 1024'
        exit 0
fi

check_memory ()
# $1 - PID location
# $2 - process_label
{
        pid_location=$1
        process_label=$2
        read pid < $pid_location
        procpath="/proc/$pid/status"
        if [ ! -e $procpath ]  || [ -z $pid ]
        then
                echo "${process_label}_vmpeak.value 0"
                echo "${process_label}_vmsize.value 0"
                echo "${process_label}_vmrss.value 0"
                exit 0
        fi

        VmPeak=`grep VmPeak /proc/$pid/status|awk '{print $2}'`
        VmSize=`grep VmSize /proc/$pid/status|awk '{print $2}'`
        VmRSS=`grep VmRSS /proc/$pid/status|awk '{print $2}'`

        echo "${process_label}_vmpeak.value $(( $VmPeak * 1024 ))"
        echo "${process_label}_vmsize.value $(( $VmSize * 1024 ))"
        echo "${process_label}_vmrss.value $(( $VmRSS * 1024 ))"
}

check_memory $COMPONENT_PID_FILE $COMPONENT_NAME
Tom Feiner
quelle
3

Es gibt Tools, die Sie beim Starten eines Prozesses verwenden können, um eine Zusammenfassung der Speichernutzung zu erhalten, sobald der Prozess abgeschlossen ist:

Die GNU-Zeit gibt auch die maximale Speichernutzung an, wenn sie mit der Option -v ausgeführt wird. Beachten Sie, dass bash auch einen integrierten Befehl namens time hat. Daher müssen Sie beim Aufrufen möglicherweise den vollständigen Pfad zur GNU-Zeit angeben, z. B. den Befehl / usr / bin / time -v . Beachten Sie außerdem, dass ältere Versionen der GNU-Zeit einen Fehler aufweisen, bei dem die Ergebnisse falsch mit 4 multipliziert werden. Überprüfen Sie beispielsweise den folgenden Link: https://bugzilla.redhat.com/show_bug.cgi?id=702826

Davitenio
quelle
0

Wenn Sie mit der Verlangsamung fertig werden, finden Sie möglicherweise valgrinddas Massiv-Tool für diesen Zweck, da es die Heap- --pages-as-heap=yesZuordnung (und den allgemeinen Speicher bei Verwendung ) im Laufe der Zeit profilieren kann .

Anon
quelle