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):
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