Picco di utilizzo della memoria di un processo


12

Strumenti come top e ps possono darmi la quantità di memoria attualmente allocata a un processo, ma sono interessato a misurare la quantità massima di memoria allocata a un processo o dalla sua creazione o in un determinato intervallo di tempo. Qualche suggerimento su come scoprirlo?

Risposte:


22

È possibile ottenere il massimo utilizzo della memoria di un determinato processo, all'indirizzo:

grep VmPeak /proc/$PID/status  

(Cambia $ PID nell'ID del processo che stai cercando).

VmPeak è la quantità massima di memoria utilizzata dal processo da quando è stata avviata.

Per tenere traccia dell'utilizzo della memoria di un processo nel tempo, è possibile utilizzare uno strumento chiamato munin per tracciare e mostrarti un bel grafico dell'utilizzo della memoria nel tempo.

Munin viene fornito con molti plug-in predefiniti per tenere traccia delle risorse di sistema, tuttavia non viene fornito con un plug-in per tenere traccia dell'utilizzo della memoria di picco - fortunatamente, è estremamente facile scrivere un plug-in per esso.

Ecco un esempio di un plugin munin per tracciare l'utilizzo della memoria VmPeak, VmRSS e VmSize, per il processo apache. È possibile modificarlo in base alle proprie esigenze (basta puntare al file PID giusto e modificare il nome del componente secondo necessità).

Il grafico che genera è simile al seguente (VmPeak e VmSize sono gli stessi in questo esempio, quindi ne vedi solo uno):

Grafico di utilizzo della memoria di Apache - Generato utilizzando il plug-in proposto in questo post

Nota: questo monitora solo il processo principale di apache e non mostra l'utilizzo della memoria dei suoi processi figlio.

#!/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

3

Esistono strumenti che è possibile utilizzare all'avvio di un processo che forniscono un riepilogo dell'utilizzo della memoria al termine del processo:

Il tempo GNU fornisce anche il massimo utilizzo della memoria quando eseguito con l'opzione -v. Si noti che bash ha anche un comando incorporato chiamato time, quindi potrebbe essere necessario specificare il percorso completo del tempo GNU quando lo si richiama, ad es., / Usr / bin / time -v comando . Inoltre, fai attenzione che le versioni precedenti di GNU time presentano un bug in cui i risultati vengono moltiplicati erroneamente per 4, ad esempio, controlla il seguente link: https://bugzilla.redhat.com/show_bug.cgi?id=702826


0

Se riesci a far fronte al rallentamento, potresti trovare lo valgrindstrumento del massiccio a questo scopo in quanto può profilare l' --pages-as-heap=yesallocazione di heap (e memoria generale quando si utilizza ) nel tempo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.