Memori puncak penggunaan suatu proses

12

Alat-alat seperti top dan ps dapat memberi saya jumlah memori yang saat ini dialokasikan untuk suatu proses, tetapi saya tertarik untuk mengukur jumlah maksimum memori yang dialokasikan untuk suatu proses baik sejak pembuatannya atau dalam interval waktu tertentu. Ada saran tentang cara mengetahuinya?

davitenio
sumber

Jawaban:

22

Anda bisa mendapatkan penggunaan memori puncak dari proses tertentu, di:

grep VmPeak /proc/$PID/status  

(Ubah $ PID ke id proses aktual yang Anda cari).

VmPeak adalah jumlah maksimum memori yang telah digunakan proses sejak dimulai.

Untuk melacak penggunaan memori dari suatu proses dari waktu ke waktu, Anda dapat menggunakan alat yang disebut munin untuk melacak, dan menunjukkan kepada Anda grafik penggunaan memori dari waktu ke waktu.

Munin hadir dengan banyak plugin default untuk melacak sumber daya sistem, namun ia tidak dilengkapi dengan plugin untuk melacak penggunaan memori Peak - sayangnya, sangat mudah untuk menulis sebuah plugin untuknya.

Berikut adalah contoh plugin munin untuk melacak penggunaan memori VmPeak, VmRSS dan VmSize, untuk proses apache. Anda dapat mengubah ini sesuai dengan kebutuhan Anda (cukup arahkan ke file PID yang tepat dan ubah nama komponen sesuai kebutuhan).

Grafik yang dihasilkannya terlihat seperti ini (VmPeak dan VmSize sama dalam contoh ini, jadi Anda hanya melihat salah satunya):

Apache Memory Usage Graph - Dihasilkan menggunakan plugin yang diusulkan dalam posting ini

Catatan: ini hanya memonitor proses apache utama, dan tidak menunjukkan penggunaan memori dari proses anak itu.

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

Ada alat yang dapat Anda gunakan saat memulai proses yang memberi Anda ringkasan penggunaan memori setelah proses selesai:

Waktu GNU juga memberikan penggunaan memori puncak ketika dieksekusi dengan opsi -v. Perhatikan bahwa bash juga memiliki perintah built-in yang disebut waktu, jadi Anda mungkin perlu menentukan path lengkap ke waktu GNU ketika menjalankannya, misalnya, perintah / usr / bin / time -v . Selain itu, berhati-hatilah bahwa waktu versi GNU yang lebih lama memiliki bug di mana hasilnya dikalikan dengan 4, misalnya, periksa tautan berikut: https://bugzilla.redhat.com/show_bug.cgi?id=702826

davitenio
sumber
0

Jika Anda dapat mengatasi perlambatan, Anda dapat menemukan valgrindalat massif untuk tujuan ini karena alat ini dapat menimbun tumpukan (dan memori umum saat menggunakan --pages-as-heap=yes) dari waktu ke waktu.

Segera
sumber