GNU/Linux >> Znalost Linux >  >> Linux

Špičkové využití paměti procesem

Řešení 1:

Maximální využití paměti pro určitý proces můžete získat na adrese:

grep VmPeak /proc/$PID/status  

(Změňte $PID na skutečné ID procesu, které hledáte).

VmPeak je maximální množství paměti, kterou proces použil od svého spuštění.

Chcete-li sledovat využití paměti procesem v průběhu času, můžete použít nástroj zvaný munin ke sledování a zobrazení pěkného grafu využití paměti v průběhu času.

Munin přichází s mnoha výchozími pluginy pro sledování systémových prostředků, ale nedodává se s pluginem pro sledování využití paměti Peak – naštěstí je extrémně snadné pro něj napsat plugin.

Zde je příklad pluginu munin pro sledování využití paměti VmPeak, VmRSS a VmSize pro proces Apache. Toto můžete změnit, aby vyhovovalo vašim potřebám (stačí ukázat na správný soubor PID a podle potřeby změnit název komponenty).

Graf, který vygeneruje, vypadá takto (VmPeak a VmSize jsou v tomto příkladu stejné, takže vidíte pouze jeden z nich):

Poznámka: to monitoruje pouze hlavní proces Apache a neukazuje využití paměti jeho podřízenými procesy.

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

Řešení 2:

Existují nástroje, které můžete použít při spouštění procesu a které vám po dokončení procesu poskytnou souhrn využití paměti:

  • memtime
  • čas

Čas GNU také poskytuje maximální využití paměti při spuštění s volbou -v. Všimněte si, že bash má také vestavěný příkaz zvaný time, takže možná budete muset při jeho vyvolání zadat úplnou cestu k času GNU, např. příkaz /usr/bin/time -v . Navíc mějte na paměti, že starší verze GNU time mají chybu, kdy jsou výsledky nesprávně vynásobeny 4, např. podívejte se na následující odkaz:https://bugzilla.redhat.com/show_bug.cgi?id=702826


Linux
  1. Jak zkontrolovat využití paměti procesu pomocí příkazu Linux pmap

  2. Nástroj, který umožňuje protokolování využití paměti?

  3. Měření využití Ram programu?

  1. Jak mohu měřit skutečné využití paměti aplikací nebo procesem?

  2. Načíst využití CPU a paměti jedním procesem v Linuxu?

  3. Omezení využití procesní paměti/CPU v linuxu

  1. Rostoucí využití rezidentní paměti (RSS) Java Process

  2. Vyvolání a sledování využití paměti jedním procesem

  3. Omezte využití paměti pro jeden proces Linuxu