Solution 1 :
Vous pouvez obtenir le pic d'utilisation de la mémoire d'un certain processus, à :
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 afficher 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 système, mais il n'est pas livré avec un plugin pour suivre l'utilisation maximale de la mémoire - 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 modifier cela 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 identiques dans cet exemple, vous n'en voyez donc qu'un) :
Remarque : cela ne surveille que le processus apache principal et ne montre 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
Solution 2 :
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é :
- memtime
- c'est l'heure
L'heure GNU donne également le pic d'utilisation 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 time, vous devrez donc peut-être spécifier le chemin complet vers l'heure GNU lors de son invocation, par exemple, /usr/bin/time -v command . De plus, méfiez-vous que les anciennes versions de l'heure GNU ont un bogue 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