프로세스의 최대 메모리 사용량


12

topps 와 같은 도구는 현재 프로세스에 할당 된 메모리 양을 제공 할 수 있지만 프로세스 생성 또는 주어진 시간 간격 동안 프로세스에 할당 된 최대 메모리 양을 측정하는 데 관심이 있습니다. 알아내는 방법에 대한 제안?

답변:


22

다음에서 특정 프로세스의 최대 메모리 사용량을 얻을 수 있습니다.

grep VmPeak /proc/$PID/status  

($ PID를 원하는 실제 프로세스 ID로 변경하십시오).

VmPeak는 프로세스가 시작된 이후 프로세스가 사용한 최대 메모리 양입니다.

시간이 지남에 따라 프로세스의 메모리 사용량을 추적하기 위해 munin 이라는 도구를 사용하여 시간이 지남에 따라 메모리 사용량에 대한 멋진 그래프를 표시 할 수 있습니다.

Munin은 시스템 리소스를 추적하기위한 많은 기본 플러그인을 제공하지만, 최대 메모리 사용량을 추적하는 플러그인은 제공되지 않습니다. 다행히도 플러그인을 작성하기가 매우 쉽습니다.

다음은 아파치 프로세스에서 VmPeak, VmRSS 및 VmSize 메모리 사용량을 추적하는 munin 플러그인의 예입니다. 필요에 따라이를 변경할 수 있습니다 (올바른 PID 파일을 가리키고 필요에 따라 구성 요소 이름을 변경하십시오).

출력되는 그래프는 다음과 같습니다 (VmPeak 및 VmSize는이 예에서 동일하므로 그 중 하나만 표시됨).

Apache 메모리 사용 그래프-이 게시물에서 제안 된 플러그인을 사용하여 생성

참고 : 이것은 주요 아파치 프로세스 만 모니터링하고 자식 프로세스의 메모리 사용량을 표시하지 않습니다.

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

프로세스가 시작되면 프로세스가 완료되면 메모리 사용에 대한 요약을 제공하는 도구가 있습니다.

GNU 시간 은 또한 -v 옵션으로 실행될 때 최대 메모리 사용량을 제공합니다. bash에는 time이라는 내장 명령도 포함되어 있으므로 GNU 시간을 호출 할 때 / usr / bin / time -v command 와 같은 GNU 시간의 전체 경로를 지정해야합니다 . 또한 이전 버전의 GNU 시간에는 결과에 4를 잘못 곱한 버그가 있습니다. 예를 들어 다음 링크를 확인하십시오. https://bugzilla.redhat.com/show_bug.cgi?id=702826


0

둔화에 대처할 수 있다면 시간이 지남에 따라 힙 (및 일반 메모리 사용 ) 할당을 프로파일 링 할 수 valgrind있으므로이 목적을위한 대산 괴 도구 를 찾을 수 있습니다 --pages-as-heap=yes.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.