एक प्रक्रिया का पीक मेमोरी उपयोग


12

शीर्ष और पीएस जैसे उपकरण मुझे वर्तमान में एक प्रक्रिया के लिए आवंटित की गई मेमोरी की मात्रा दे सकते हैं, लेकिन मैं किसी भी प्रक्रिया को आवंटित मेमोरी की अधिकतम मात्रा को मापने में दिलचस्पी रखता हूं या तो इसके निर्माण के बाद से या एक निश्चित समय अंतराल में। कैसे पता लगाने के लिए कोई सुझाव?

जवाबों:


22

आप एक निश्चित प्रक्रिया का चरम मेमोरी उपयोग प्राप्त कर सकते हैं:

grep VmPeak /proc/$PID/status  

(उस वास्तविक प्रक्रिया आईडी में $ PID बदलें जो आप खोज रहे हैं)।

VmPeak स्मृति की अधिकतम मात्रा है जो इस प्रक्रिया का उपयोग करती है क्योंकि इसे शुरू किया गया था।

समय के साथ किसी प्रक्रिया के मेमोरी उपयोग को ट्रैक करने के लिए, आप ट्रैक करने के लिए मुनिन नामक टूल का उपयोग कर सकते हैं , और आपको समय के साथ मेमोरी उपयोग का एक अच्छा ग्राफ दिखा सकते हैं।

सिस्टम संसाधनों को ट्रैक करने के लिए मुनिन कई डिफ़ॉल्ट प्लगइन्स के साथ आता है, हालांकि यह पीक मेमोरी उपयोग को ट्रैक करने के लिए एक प्लगइन के साथ नहीं आता है - सौभाग्य से, इसके लिए एक प्लगइन लिखना बेहद आसान है।

Apache प्रक्रिया के लिए VmPeak, VmRSS और VmSize मेमोरी उपयोग को ट्रैक करने के लिए एक मुनिन प्लगइन का उदाहरण दिया गया है। आप अपनी आवश्यकताओं के अनुरूप इसे बदल सकते हैं (केवल सही PID फ़ाइल को इंगित करें और आवश्यकतानुसार घटक नाम बदलें)।

यह जो आउटपुट देता है वह इस तरह दिखता है (VmPeak और VmSize इस उदाहरण में समान हैं, इसलिए आप केवल उनमें से एक को देखते हैं):

अपाचे मेमोरी उपयोग ग्राफ - इस पोस्ट में प्रस्तावित प्लगइन का उपयोग करके उत्पन्न

नोट: यह केवल मुख्य अपाचे प्रक्रिया पर नज़र रखता है, और यह बच्चे की प्रक्रियाओं की स्मृति उपयोग नहीं दिखाता है।

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

3

ऐसे उपकरण हैं जिनका उपयोग आप एक प्रक्रिया शुरू करते समय कर सकते हैं जो प्रक्रिया समाप्त होने के बाद आपको मेमोरी उपयोग का सारांश देती है:

जीएनयू समय -v विकल्प के साथ निष्पादित होने पर शिखर मेमोरी का उपयोग भी देता है। ध्यान दें कि बैश में एक अंतर्निहित कमांड भी है जिसे समय कहा जाता है, इसलिए आपको इसे लागू करते समय GNU समय के लिए पूर्ण पथ निर्दिष्ट करना पड़ सकता है, जैसे, / usr / bin / time -v कमांड । इसके अलावा, जीएनयू समय के पुराने संस्करणों में एक बग है जहां परिणाम गलत तरीके से 4 से गुणा किए जाते हैं, उदाहरण के लिए, निम्न लिंक देखें: https://bugzilla.redhat.com/show_bug.cgi?id=702826


0

यदि आप मंदी के साथ सामना कर सकते हैं तो आपको इस उद्देश्य के लिए valgrindमासिफ टूल मिल सकता है क्योंकि --pages-as-heap=yesसमय के साथ आवंटन में यह ढेर (और सामान्य मेमोरी का उपयोग करते समय) का उपयोग कर सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.