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