Ř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