Yanıtlar:
Belirli bir işlemin en yüksek bellek kullanımını şu adresten alabilirsiniz:
grep VmPeak /proc/$PID/status
($ PID'yi aradığınız gerçek işlem kimliğiyle değiştirin).
VmPeak, işlemin başlatıldığından beri kullandığı maksimum bellek miktarıdır.
Bir işlemin zaman içindeki bellek kullanımını izlemek için, izlemek için munin adlı bir araç kullanabilir ve zaman içinde bellek kullanımının güzel bir grafiğini gösterebilirsiniz.
Munin, sistem kaynaklarını izlemek için birçok varsayılan eklenti ile birlikte gelir, ancak Peak bellek kullanımını izlemek için bir eklenti ile birlikte gelmez - neyse ki, bunun için bir eklenti yazmak son derece kolaydır.
Apache işlemi için VmPeak, VmRSS ve VmSize bellek kullanımını izlemek için bir munin eklentisi örneği. Bunu ihtiyaçlarınıza göre değiştirebilirsiniz (sadece doğru PID dosyasını işaret edin ve bileşen adını gerektiği gibi değiştirin).
Çıkardığı grafik şöyle görünür (VmPeak ve VmSize bu örnekte aynıdır, bu nedenle bunlardan yalnızca birini görürsünüz):
Not: Bu yalnızca ana apache işlemini izler ve alt süreçlerinin bellek kullanımını göstermez.
#!/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
Bir işlemi başlatırken, işlem bittiğinde size bellek kullanımının bir özetini veren araçlar vardır:
GNU süresi ayrıca -v seçeneği ile yürütüldüğünde en yüksek bellek kullanımını sağlar. Bash'ın ayrıca time adında yerleşik bir komutu olduğunu unutmayın, bu nedenle çağırırken GNU saatinin tam yolunu belirtmeniz gerekebilir, örn. / Usr / bin / time -v komutu . Dahası, GNU süresinin eski sürümlerinde sonuçların 4 ile yanlış çarpıldığı bir hata olduğunu unutmayın, örneğin, aşağıdaki bağlantıyı kontrol edin: https://bugzilla.redhat.com/show_bug.cgi?id=702826
Yavaşlama ile başa çıkabiliyorsanız, zaman içinde yığın (ve kullanırken genel bellek ) profilini oluşturabildiği için bu amaç için valgrind
masif aracını bulabilirsiniz --pages-as-heap=yes
.