리눅스
Linux에서이 정보는 / proc 파일 시스템에서 사용 가능합니다. 각 Linux 배포판이 적어도 하나의 중요한 파일을 사용자 정의하는 것처럼 보이므로 사용 된 텍스트 파일 형식을 좋아하지 않습니다. 'ps'의 출처로 간략히 살펴보면 혼란이 드러납니다.
그러나 여기에 원하는 정보를 찾을 수있는 곳이 있습니다.
/ proc / meminfo 에는 시스템 전체에 대한 대부분의 정보가 포함되어 있습니다. 여기 내 시스템처럼 보입니다. MemTotal , MemFree , SwapTotal 및 SwapFree에 관심이 있다고 생각합니다 .
Anderson cxc # more /proc/meminfo
MemTotal: 4083948 kB
MemFree: 2198520 kB
Buffers: 82080 kB
Cached: 1141460 kB
SwapCached: 0 kB
Active: 1137960 kB
Inactive: 608588 kB
HighTotal: 3276672 kB
HighFree: 1607744 kB
LowTotal: 807276 kB
LowFree: 590776 kB
SwapTotal: 2096440 kB
SwapFree: 2096440 kB
Dirty: 32 kB
Writeback: 0 kB
AnonPages: 523252 kB
Mapped: 93560 kB
Slab: 52880 kB
SReclaimable: 24652 kB
SUnreclaim: 28228 kB
PageTables: 2284 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 4138412 kB
Committed_AS: 1845072 kB
VmallocTotal: 118776 kB
VmallocUsed: 3964 kB
VmallocChunk: 112860 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
Hugepagesize: 2048 kB
CPU 사용률을 높이려면 약간의 작업이 필요합니다. Linux는 시스템 시작 이후 전체 CPU 사용률을 제공합니다. 이것은 아마도 당신이 관심이있는 것이 아닐 것입니다. 마지막 1 초 또는 10 초 동안의 CPU 사용률을 알고 싶다면 정보를 쿼리하고 직접 계산해야합니다.
이 정보는 / proc / stat 에 있으며 http://www.linuxhowtos.org/System/procstat.htm에 잘 설명되어 있습니다 . 내 4 코어 상자의 모양은 다음과 같습니다.
Anderson cxc # more /proc/stat
cpu 2329889 0 2364567 1063530460 9034 9463 96111 0
cpu0 572526 0 636532 265864398 2928 1621 6899 0
cpu1 590441 0 531079 265949732 4763 351 8522 0
cpu2 562983 0 645163 265796890 682 7490 71650 0
cpu3 603938 0 551790 265919440 660 0 9040 0
intr 37124247
ctxt 50795173133
btime 1218807985
processes 116889
procs_running 1
procs_blocked 0
먼저 시스템에서 사용 가능한 CPU (또는 프로세서 또는 처리 코어) 수를 결정해야합니다. 이렇게하려면 'cpuN'항목 수를 세십시오. 여기서 N은 0에서 시작하여 증가합니다. cpuN 라인의 조합 인 'cpu'라인을 계산하지 마십시오. 이 예에서는 cpu0에서 cpu3까지 총 4 개의 프로세서를 볼 수 있습니다. 이제부터 cpu0..cpu3을 무시하고 'cpu'줄에만 집중할 수 있습니다.
다음으로,이 행의 네 번째 숫자는 유휴 시간의 측정 값이므로 'cpu'행의 네 번째 숫자는 부팅 시간 이후 모든 프로세서의 총 유휴 시간입니다. 이 시간은 초당 1/100의 Linux "jiffies"로 측정됩니다.
그러나 총 유휴 시간은 신경 쓰지 않습니다. 주어진 기간 (예 : 마지막 초)의 유휴 시간에 관심이 있습니다. 이 파일을 1 초 간격으로 두 번 읽어야한다고 계산 한 다음 줄의 네 번째 값을 비교할 수 있습니다. 예를 들어 샘플을 가져 와서 얻는 경우 :
cpu 2330047 0 2365006 1063853632 9035 9463 96114 0
그런 다음 1 초 후에이 샘플을 얻습니다.
cpu 2330047 0 2365007 1063854028 9035 9463 96114 0
두 숫자를 빼면 diff가 396이됩니다. 이는 마지막 1.00 초 동안 3.96 초 동안 CPU가 유휴 상태 였다는 의미입니다. 물론 비결은 프로세서 수로 나누어야한다는 것입니다. 3.96 / 4 = 0.99이며 유휴 비율이 있습니다. 유휴 99 %, 통화 중 1 %
내 코드에는 360 개의 링 버퍼가 있으며 매초 마다이 파일을 읽습니다. 이를 통해 1 초, 10 초 등의 CPU 사용률을 최대 1 시간까지 빠르게 계산할 수 있습니다.
프로세스 별 정보는 / proc / pid를 확인하십시오. . pid에 신경 쓰지 않으면 / proc / self를 볼 수 있습니다.
프로세스에서 사용하는 CPU는 / proc / self / stat에서 사용 가능 합니다. 이것은 한 줄로 구성된 이상한 파일입니다. 예를 들면 다음과 같습니다.
19340 (whatever) S 19115 19115 3084 34816 19115 4202752 118200 607 0 0 770 384 2
7 20 0 77 0 266764385 692477952 105074 4294967295 134512640 146462952 321468364
8 3214683328 4294960144 0 2147221247 268439552 1276 4294967295 0 0 17 0 0 0 0
여기서 중요한 데이터는 13 번째 및 14 번째 토큰입니다 (여기서는 0 및 770). 13 번째 토큰은 프로세스가 사용자 모드에서 실행 한 지프 수이고, 14 번째 토큰은 프로세스가 커널 모드에서 실행 한 지프 수입니다. 이 두 가지를 합하면 총 CPU 사용률이 높아집니다.
시간이 지남에 따라 프로세스의 CPU 사용량을 판별하려면이 파일을 주기적으로 샘플링하고 diff를 계산해야합니다.
편집하다: 프로세스의 CPU 사용률을 계산할 때 1) 프로세스의 스레드 수와 2) 시스템의 프로세서 수를 고려해야합니다. 예를 들어, 단일 스레드 프로세스가 CPU의 25 % 만 사용하는 경우 좋거나 나쁠 수 있습니다. 단일 프로세서 시스템에서는 좋지만 4 프로세서 시스템에서는 좋지 않습니다. 이는 프로세스가 지속적으로 실행되고 있으며 사용 가능한 CPU주기를 100 % 사용함을 의미합니다.
프로세스 별 메모리 정보는 다음과 같이 / proc / self / status를 확인하십시오.
Name: whatever
State: S (sleeping)
Tgid: 19340
Pid: 19340
PPid: 19115
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 256
Groups: 0 1 2 3 4 6 10 11 20 26 27
VmPeak: 676252 kB
VmSize: 651352 kB
VmLck: 0 kB
VmHWM: 420300 kB
VmRSS: 420296 kB
VmData: 581028 kB
VmStk: 112 kB
VmExe: 11672 kB
VmLib: 76608 kB
VmPTE: 1244 kB
Threads: 77
SigQ: 0/36864
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: fffffffe7ffbfeff
SigIgn: 0000000010001000
SigCgt: 20000001800004fc
CapInh: 0000000000000000
CapPrm: 00000000ffffffff
CapEff: 00000000fffffeff
Cpus_allowed: 0f
Mems_allowed: 1
voluntary_ctxt_switches: 6518
nonvoluntary_ctxt_switches: 6598
'Vm'으로 시작하는 항목은 흥미로운 항목입니다.
- VmPeak 는 프로세스에서 사용하는 최대 가상 메모리 공간 (kB (1024 바이트))입니다.
- VmSize 는 프로세스에서 사용하는 현재 가상 메모리 공간 (KB)입니다. 이 예에서는 651,352kB 또는 약 636MB입니다.
- VmRss 는 프로세스의 주소 공간 또는 상주 세트 크기에 매핑 된 메모리의 양입니다. 이것은 훨씬 작습니다 (420,296 kB 또는 약 410 메가 바이트). 차이점 : 내 프로그램은 mmap ()을 통해 636MB를 매핑했지만 그 중 410MB에만 액세스하므로 410MB의 페이지 만 할당되었습니다.
확실하지 않은 유일한 항목은 현재 내 프로세스에서 사용하는 스왑 공간 입니다. 이것이 가능한지 모르겠습니다.