Pico de uso de memória de um processo

12

Ferramentas como top e ps podem me fornecer a quantidade de memória atualmente alocada para um processo, mas estou interessado em medir a quantidade máxima de memória alocada em um processo desde a sua criação ou em um determinado intervalo de tempo. Alguma sugestão de como descobrir?

davitenio
fonte

Respostas:

22

Você pode obter o pico de uso de memória de um determinado processo em:

grep VmPeak /proc/$PID/status  

(Altere $ PID para o ID do processo real que você está procurando).

VmPeak é a quantidade máxima de memória que o processo usou desde que foi iniciado.

Para rastrear o uso da memória de um processo ao longo do tempo, você pode usar uma ferramenta chamada munin para rastrear e mostrar um bom gráfico do uso da memória ao longo do tempo.

O Munin vem com muitos plug-ins padrão para rastrear os recursos do sistema, no entanto, ele não vem com um plug-in para rastrear o uso máximo da memória - felizmente, é extremamente fácil escrever um plug-in para ele.

Aqui está um exemplo de um plugin munin para rastrear o uso de memória VmPeak, VmRSS e VmSize, para o processo apache. Você pode alterar isso para atender às suas necessidades (basta apontar para o arquivo PID correto e alterar o nome do componente conforme necessário).

O gráfico que ele gera tem a seguinte aparência (VmPeak e VmSize são os mesmos neste exemplo, portanto, você vê apenas um deles):

Gráfico de uso de memória Apache - gerado usando o plugin proposto neste post

Nota: isso monitora apenas o processo principal do apache e não mostra o uso de memória de seus processos filhos.

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

Existem ferramentas que você pode usar ao iniciar um processo que fornecem um resumo do uso da memória assim que o processo termina:

O tempo GNU também fornece o pico de uso da memória quando executado com a opção -v. Observe que o bash também possui um comando interno chamado time, portanto, pode ser necessário especificar o caminho completo para o tempo GNU ao invocá-lo, por exemplo, comando / usr / bin / time -v . Além disso, lembre-se de que as versões mais antigas do GNU time têm um erro no qual os resultados são multiplicados incorretamente por 4, por exemplo, verifique o seguinte link: https://bugzilla.redhat.com/show_bug.cgi?id=702826

davitenio
fonte
0

Se você puder lidar com a desaceleração, poderá encontrar valgrinda ferramenta maciça para esse fim, pois pode criar um perfil da --pages-as-heap=yesalocação de pilha (e memória geral ao usar ) ao longo do tempo.

Anon
fonte