Uso pico de memoria de un proceso

12

Las herramientas como top y ps pueden proporcionarme la cantidad de memoria asignada actualmente a un proceso, pero estoy interesado en medir la cantidad máxima de memoria asignada a un proceso desde su creación o en un intervalo de tiempo determinado. ¿Alguna sugerencia sobre cómo averiguarlo?

davitenio
fuente

Respuestas:

22

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

Gráfico de uso de memoria de Apache: generado utilizando el complemento propuesto en esta publicación

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
Tom Feiner
fuente
3

Hay herramientas que puede usar al iniciar un proceso que le brindan un resumen del uso de la memoria una vez que finaliza el proceso:

El tiempo GNU también proporciona el uso máximo de memoria cuando se ejecuta con la opción -v. Tenga en cuenta que bash también tiene un comando incorporado llamado time, por lo que es posible que deba especificar la ruta completa al tiempo GNU al invocarlo, por ejemplo, / usr / bin / time -v command . Además, tenga en cuenta que las versiones anteriores de GNU time tienen un error en el que los resultados se multiplican incorrectamente por 4, por ejemplo, consulte el siguiente enlace: https://bugzilla.redhat.com/show_bug.cgi?id=702826

davitenio
fuente
0

Si puede hacer frente a la desaceleración, puede encontrar valgrindla herramienta de macizo para este propósito, ya que puede perfilar la --pages-as-heap=yesasignación del montón (y la memoria general cuando se usa ) con el tiempo.

Luego
fuente