GNU/Linux >> Linux Esercitazione >  >> Linux

Picco di utilizzo della memoria di un processo

Soluzione 1:

Puoi ottenere il picco di utilizzo della memoria di un determinato processo, su:

grep VmPeak /proc/$PID/status  

(Cambia $PID con l'ID del processo effettivo che stai cercando).

VmPeak è la quantità massima di memoria utilizzata dal processo da quando è stato avviato.

Per tenere traccia dell'utilizzo della memoria di un processo nel tempo, puoi utilizzare uno strumento chiamato munin per monitorare e mostrarti un bel grafico dell'utilizzo della memoria nel tempo.

Munin viene fornito con molti plug-in predefiniti per tenere traccia delle risorse di sistema, tuttavia non viene fornito con un plug-in per tenere traccia dell'utilizzo massimo della memoria:fortunatamente, è estremamente facile scrivere un plug-in per questo.

Ecco un esempio di un plug-in munin per tenere traccia dell'utilizzo della memoria di VmPeak, VmRSS e VmSize, per il processo Apache. Puoi modificarlo in base alle tue esigenze (basta puntare al file PID corretto e modificare il nome del componente secondo necessità).

Il grafico che genera ha questo aspetto (VmPeak e VmSize sono gli stessi in questo esempio, quindi ne vedi solo uno):

Nota: questo monitora solo il processo principale di apache e non mostra l'utilizzo della memoria dei suoi processi figli.

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

Soluzione 2:

Esistono strumenti che puoi utilizzare all'avvio di un processo che ti forniscono un riepilogo dell'utilizzo della memoria al termine del processo:

  • memtime
  • tstime

Tempo GNU fornisce anche il picco di utilizzo della memoria quando eseguito con l'opzione -v. Nota che bash ha anche un comando integrato chiamato time, quindi potresti dover specificare il percorso completo di GNU time quando lo invochi, ad esempio /usr/bin/time -v command . Inoltre, fai attenzione che le versioni precedenti di GNU time hanno un bug in cui i risultati vengono erroneamente moltiplicati per 4, ad esempio controlla il seguente link:https://bugzilla.redhat.com/show_bug.cgi?id=702826


Linux
  1. Utilizzo della memoria di Linux

  2. Come controllare l'utilizzo della memoria del processo con il comando pmap di Linux

  3. Linux:limite all'utilizzo della memoria per un singolo processo Linux?

  4. Misurare l'utilizzo della RAM di un programma?

  5. Picco di utilizzo della memoria di un processo Linux/Unix

Crescente utilizzo della memoria residente (RSS) di Java Process

Utilizzo della memoria dei comandi TOP

Limita l'utilizzo della memoria per un singolo processo Linux

Come viene riportato l'utilizzo della memoria in Linux?

Utilizzo della memoria del processo grafico su Linux

Ubuntu Linux:elabora la memoria di scambio e l'utilizzo della memoria