GNU/Linux >> Belajar Linux >  >> Linux

Penggunaan memori puncak dari suatu proses

Solusi 1:

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

grep VmPeak /proc/$PID/status  

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

VmPeak adalah jumlah maksimum memori yang digunakan proses sejak dimulai.

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

Munin dilengkapi dengan banyak plugin default untuk melacak sumber daya sistem, namun tidak dilengkapi dengan plugin untuk melacak penggunaan memori puncak - untungnya, sangat mudah untuk menulis plugin untuk itu.

Berikut adalah contoh plugin munin untuk melacak penggunaan memori VmPeak,VmRSS dan VmSize , untuk proses apache. Anda dapat mengubahnya sesuai kebutuhan (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):

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

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

Solusi 2:

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

  • waktu mem
  • waktu

waktu GNU juga memberikan penggunaan memori puncak saat dijalankan dengan opsi -v. Perhatikan bahwa bash juga memiliki perintah bawaan bernama waktu, jadi Anda mungkin perlu menentukan jalur lengkap ke waktu GNU saat menjalankannya, misalnya, /usr/bin/time -v command . Selain itu, berhati-hatilah karena versi waktu GNU yang lebih lama memiliki bug di mana hasilnya salah dikalikan 4, misalnya, periksa tautan berikut:https://bugzilla.redhat.com/show_bug.cgi?id=702826


Linux
  1. Cara Memeriksa Penggunaan Memori Proses dengan Perintah pmap Linux

  2. Linux – Penggunaan Memori Nyata?

  3. Alat Yang Memungkinkan Pencatatan Penggunaan Memori?

  1. Ambil penggunaan CPU dan penggunaan memori dari satu proses di Linux?

  2. Penggunaan memori tinggi tetapi tidak ada proses yang menggunakannya

  3. Bagaimana penggunaan memori dilaporkan di Linux?

  1. Penggunaan Memori Linux

  2. Linux – Batasi Penggunaan Memori Untuk Proses Linux Tunggal?

  3. Mengukur Penggunaan Ram Suatu Program?