Utilisation maximale de la mémoire d'un processus

12

Des outils comme top et ps peuvent me donner la quantité de mémoire actuellement allouée à un processus, mais je suis intéressé à mesurer la quantité maximale de mémoire allouée à un processus depuis sa création ou dans un intervalle de temps donné. Des suggestions sur la façon de le savoir?

davitenio
la source

Réponses:

22

Vous pouvez obtenir l'utilisation maximale de la mémoire d'un certain processus, à l'adresse:

grep VmPeak /proc/$PID/status  

(Remplacez $ PID par l'ID de processus réel que vous recherchez).

VmPeak est la quantité maximale de mémoire utilisée par le processus depuis son démarrage.

Afin de suivre l'utilisation de la mémoire d'un processus au fil du temps, vous pouvez utiliser un outil appelé munin pour suivre et vous montrer un joli graphique de l'utilisation de la mémoire au fil du temps.

Munin est livré avec de nombreux plugins par défaut pour suivre les ressources du système, mais il ne vient pas avec un plugin pour suivre l'utilisation de la mémoire Peak - heureusement, il est extrêmement facile d'écrire un plugin pour cela.

Voici un exemple de plugin munin pour suivre l'utilisation de la mémoire VmPeak, VmRSS et VmSize, pour le processus apache. Vous pouvez le modifier en fonction de vos besoins (il suffit de pointer vers le bon fichier PID et de modifier le nom du composant si nécessaire).

Le graphique qu'il génère ressemble à ceci (VmPeak et VmSize sont les mêmes dans cet exemple, donc vous n'en voyez qu'un seul):

Graphique d'utilisation de la mémoire Apache - Généré à l'aide du plugin proposé dans cet article

Remarque: cela surveille uniquement le processus Apache principal et n'affiche pas l'utilisation de la mémoire de ses processus enfants.

#!/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
la source
3

Il existe des outils que vous pouvez utiliser lors du démarrage d'un processus qui vous donnent un résumé de l'utilisation de la mémoire une fois le processus terminé:

Le temps GNU donne également l'utilisation maximale de la mémoire lorsqu'il est exécuté avec l'option -v. Notez que bash a également une commande intégrée appelée heure, vous devrez donc peut-être spécifier le chemin d'accès complet à l'heure GNU lors de son appel, par exemple, la commande / usr / bin / time -v . De plus, sachez que les anciennes versions de GNU time ont un bug où les résultats sont incorrectement multipliés par 4, par exemple, vérifiez le lien suivant: https://bugzilla.redhat.com/show_bug.cgi?id=702826

davitenio
la source
0

Si vous pouvez faire face au ralentissement, vous trouverez peut-être valgrindl'outil massif à cet effet car il peut profiler l' --pages-as-heap=yesallocation de tas (et la mémoire générale lors de l'utilisation ) au fil du temps.

Anon
la source