Puede obtener el uso máximo de memoria de un determinado proceso en:
grep VmPeak /proc/$PID/status
(Cambie $ PID a la identificación de proceso real que está buscando).
VmPeak es la cantidad máxima de memoria que el proceso ha utilizado desde que se inició.
Para rastrear el uso de la memoria de un proceso a lo largo del tiempo, puede usar una herramienta llamada munin para rastrear y mostrarle un buen gráfico del uso de la memoria a lo largo del tiempo.
Munin viene con muchos complementos predeterminados para rastrear los recursos del sistema, sin embargo, no viene con un complemento para rastrear el uso de la memoria Peak; por fortuna, es extremadamente fácil escribir un complemento para él.
Aquí hay un ejemplo de un complemento munin para rastrear el uso de memoria VmPeak, VmRSS y VmSize, para el proceso de apache. Puede cambiar esto para satisfacer sus necesidades (solo apunte al archivo PID correcto y cambie el nombre del componente según sea necesario).
El gráfico que genera se ve así (VmPeak y VmSize son los mismos en este ejemplo, por lo que solo verá uno de ellos):
Nota: esto solo monitorea el proceso principal de apache y no muestra el uso de memoria de sus procesos secundarios.
#!/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