메모리 및 CPU 사용률 계산

메모리 및 CPU 사용률 계산

/proc/stat파일 을 사용하여 /proc/status프로세스의 CPU 및 메모리 사용률을 계산하는 방법을 알고 싶습니다 . 사용자가 사용하는 총 메모리와 CPU를 계산할 수 있나요?

답변1

ps가장 간단한 정보 인터페이스입니다 /proc.

각 사용자의 메모리를 나열하는 한 가지 방법은 다음과 같습니다.

$ ps -e -o uid,vsz | awk '
{ usage[$1] += $2 }
END { for (uid in usage) { print uid, ":", usage[uid] } }'

정말로 proc을 사용하고 싶다면 Python이나 Perl과 같은 것을 사용하여 한 번 반복하고 /proc/*/status사용자/사용 키/값 쌍을 해시에 저장하는 것이 좋습니다.

관련 필드는 /proc/PID/status다음과 같습니다.

Uid:    500     500     500     500
VmSize:     1234 kB

내 생각에 이 4개의 Uid 숫자는 실제 uid, 유효 uid, save uid 및 fs uid라고 생각합니다.

실제 uid를 원한다고 가정하면 다음과 같이 작동합니다.

# print uid and the total memory (including virtual memory) in use by that user
# TODO add error handling, e.g. not Linux, values not in kB, values not ints, etc.

import os
import sys
import glob

# uid=>vsz in KB
usermem = {}

# obtain information from Linux /proc file system
# http://www.kernel.org/doc/man-pages/online/pages/man5/proc.5.html
os.chdir('/proc')
for file in glob.glob('[0-9]*'):
    with open(os.path.join(file, 'status')) as status:
        uid = None
        mem = None
        for line in status:
            if line.startswith('Uid:'):
                label, ruid, euid, suid, fsuid = line.split()
                uid = int(ruid)
            elif line.startswith('VmSize:'):
                label, value, units = line.split()
                mem = int(value)
        if uid and mem:
            if uid not in usermem:
                usermem[uid] = 0
            usermem[uid] += mem

for uid in usermem:
    print '%d:%d' % (uid,usermem[uid])

CPU는 더욱 어렵습니다.

ps(1) 매뉴얼 페이지에는 다음과 같이 나와 있습니다.

   CPU usage is currently expressed as the percentage of time spent
   running during the entire lifetime of a process. This is not ideal,
   and it does not conform to the standards that ps otherwise conforms to.
   CPU usage is unlikely to add up to exactly 100%.

그래서 잘 모르겠습니다. 어쩌면 top그것이 어떻게 처리되는지 볼 수 있습니다 . 아니면 ps -e -o uid,pid,elapsed주어진 간격으로 두 번 실행하고 두 번 뺄 수도 있습니다 .

또는 이 목적에 더 적합한 것을 설치하십시오.프로세스 회계.

답변2

이 파일을 확인할 수 있습니다 /proc/meminfo:

cat /proc/meminfo | head -2
MemTotal:        2026816 kB
MemFree:          377524 kB

위의 두 항목을 사용하여 현재 사용되는 메모리 양을 파악할 수 있습니다.

cat /proc/meminfo | head -2 | awk 'NR == 1 { total = $2 } NR == 2 { free = $2 } END { print total, free, total - free }'

관련 정보