Sử dụng bộ nhớ tối đa của một quá trình


12

Các công cụ như topps có thể cung cấp cho tôi lượng bộ nhớ hiện được phân bổ cho một quy trình, nhưng tôi quan tâm đến việc đo lượng bộ nhớ tối đa được phân bổ cho một quy trình kể từ khi tạo hoặc trong một khoảng thời gian nhất định. Bất kỳ đề xuất về làm thế nào để tìm hiểu?

Câu trả lời:


22

Bạn có thể có được mức sử dụng bộ nhớ cao nhất của một quy trình nhất định, tại:

grep VmPeak /proc/$PID/status  

(Thay đổi $ PID thành id quá trình thực tế mà bạn đang tìm kiếm).

VmPeak là dung lượng bộ nhớ tối đa mà quá trình đã sử dụng kể từ khi nó được bắt đầu.

Để theo dõi việc sử dụng bộ nhớ của một quá trình theo thời gian, bạn có thể sử dụng một công cụ có tên là munin để theo dõi và hiển thị cho bạn một biểu đồ đẹp về việc sử dụng bộ nhớ theo thời gian.

Munin đi kèm với nhiều plugin mặc định để theo dõi tài nguyên hệ thống, tuy nhiên, nó không đi kèm với một plugin để theo dõi việc sử dụng bộ nhớ Đỉnh - thật may mắn, việc viết một plugin cho nó cực kỳ dễ dàng.

Dưới đây là ví dụ về plugin munin để theo dõi việc sử dụng bộ nhớ VmPeak, VmRSS và VmSize, cho quá trình apache. Bạn có thể thay đổi điều này cho phù hợp với nhu cầu của bạn (chỉ cần trỏ đến đúng tệp PID và thay đổi tên thành phần nếu cần).

Biểu đồ mà nó xuất ra trông như thế này (VmPeak và VmSize giống nhau trong ví dụ này, vì vậy bạn chỉ nhìn thấy một trong số chúng):

Biểu đồ sử dụng bộ nhớ Apache - Được tạo bằng cách sử dụng plugin được đề xuất trong bài đăng này

Lưu ý: điều này chỉ giám sát quá trình apache chính và không hiển thị mức sử dụng bộ nhớ của các tiến trình con đó.

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

Có những công cụ bạn có thể sử dụng khi bắt đầu một quy trình cung cấp cho bạn bản tóm tắt về việc sử dụng bộ nhớ sau khi quá trình kết thúc:

Thời gian GNU cũng cung cấp mức sử dụng bộ nhớ cao nhất khi được thực hiện với tùy chọn -v. Lưu ý rằng bash cũng có một lệnh tích hợp được gọi là thời gian, vì vậy bạn có thể cần chỉ định đường dẫn đầy đủ đến thời gian GNU khi gọi nó, ví dụ: lệnh / usr / bin / time -v . Hơn nữa, hãy cẩn thận rằng các phiên bản cũ hơn của thời gian GNU có lỗi trong đó các kết quả được nhân không chính xác với 4, ví dụ: kiểm tra liên kết sau: https://bugzilla.redhat.com/show_orms.cgi?id=702826


0

Nếu bạn có thể đối phó với sự chậm lại, bạn có thể tìm thấy valgrindcông cụ massif cho mục đích này vì nó có thể cấu hình --pages-as-heap=yesphân bổ heap (và bộ nhớ chung khi sử dụng ) theo thời gian.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.