ลินุกซ์
ใน 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 โดยรวมมีอยู่ตั้งแต่เริ่มต้นระบบ นี่อาจไม่ใช่สิ่งที่คุณสนใจหากคุณต้องการทราบว่าการใช้งาน CPU ในช่วงวินาทีสุดท้ายหรือ 10 วินาทีจากนั้นคุณต้องค้นหาข้อมูลและคำนวณด้วยตัวคุณเอง
ข้อมูลมีอยู่ใน/ proc / statซึ่งจัดทำเป็นเอกสารค่อนข้างดีที่http://www.linuxhowtos.org/System/procstat.htm ; นี่คือสิ่งที่ดูเหมือนในกล่อง 4-core ของฉัน:
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 และเพิ่มขึ้น อย่านับบรรทัด 'cpu' ซึ่งเป็นการรวมกันของบรรทัด cpuN ในตัวอย่างของฉันคุณสามารถเห็น cpu0 ถึง cpu3 สำหรับโปรเซสเซอร์ 4 ตัว จากนี้ไปคุณสามารถละเว้น cpu0..cpu3 และเน้นเฉพาะที่บรรทัด 'cpu'
ถัดไปคุณต้องรู้ว่าตัวเลขที่สี่ในบรรทัดเหล่านี้เป็นการวัดเวลาว่างดังนั้นตัวเลขที่สี่ในบรรทัด 'cpu' จึงเป็นเวลาว่างทั้งหมดสำหรับตัวประมวลผลทั้งหมดตั้งแต่เวลาบูต เวลานี้วัดใน Linux "jiffies" ซึ่งมีค่า 1/100 วินาทีต่อวินาที
แต่คุณไม่สนใจเวลาว่างทั้งหมด คุณสนใจเวลาว่างในช่วงเวลาที่กำหนดเช่นวินาทีสุดท้าย ทำการคำนวณว่าคุณต้องอ่านไฟล์นี้สองครั้งห่างกัน 1 วินาทีจากนั้นคุณสามารถทำผลต่างของค่าที่สี่ของบรรทัด ตัวอย่างเช่นถ้าคุณนำตัวอย่างและรับ:
cpu 2330047 0 2365006 1063853632 9035 9463 96114 0
จากนั้นหนึ่งวินาทีต่อมาคุณจะได้รับตัวอย่างนี้:
cpu 2330047 0 2365007 1063854028 9035 9463 96114 0
ลบตัวเลขทั้งสองออกและคุณจะได้ผลต่างเท่ากับ 396 ซึ่งหมายความว่า CPU ของคุณไม่มีการใช้งานเป็นเวลา 3.96 วินาทีจากช่วง 1.00 วินาทีสุดท้าย แน่นอนว่าเคล็ดลับคือคุณต้องหารด้วยจำนวนโปรเซสเซอร์ 3.96 / 4 = 0.99 และมีเปอร์เซ็นต์ว่างของคุณ ว่าง 99% และไม่ว่าง 1%
ในรหัสของฉันฉันมีริงบัฟเฟอร์ 360 รายการและฉันอ่านไฟล์นี้ทุกวินาที นั่นทำให้ฉันคำนวณการใช้งาน CPU ได้อย่างรวดเร็วเป็นเวลา 1 วินาที 10 วินาที ฯลฯ ไปจนถึง 1 ชั่วโมง
สำหรับข้อมูลเฉพาะกระบวนการคุณต้องดูใน/ proc / pid ; หากคุณไม่สนใจ abid pid ของคุณคุณสามารถดู / proc / self
CPU ที่ใช้โดยกระบวนการของคุณสามารถใช้ได้ใน/ proc / ตนเอง / สถิติ ไฟล์นี้เป็นไฟล์ที่มีลักษณะแปลกประกอบด้วยหนึ่งบรรทัด ตัวอย่างเช่น:
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 ของกระบวนการในช่วงเวลาหนึ่ง
แก้ไข: จำไว้ว่าเมื่อคุณคำนวณการใช้ CPU ของกระบวนการคุณต้องคำนึงถึง 1) จำนวนเธรดในกระบวนการของคุณและ 2) จำนวนตัวประมวลผลในระบบ ตัวอย่างเช่นหากกระบวนการเธรดเดี่ยวของคุณใช้ CPU เพียง 25% นั่นอาจจะดีหรือไม่ดีก็ได้ ดีในระบบตัวประมวลผลเดียว แต่ไม่ดีในระบบตัวประมวลผล 4 ตัว ซึ่งหมายความว่ากระบวนการของคุณทำงานอย่างต่อเนื่องและใช้ 100% ของรอบ CPU ที่มีให้
สำหรับข้อมูลหน่วยความจำเฉพาะกระบวนการคุณต้องดู / 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,352 kB หรือประมาณ 636 เมกะไบต์
- VmRssคือจำนวนหน่วยความจำที่ถูกแมปเข้ากับพื้นที่ที่อยู่ของกระบวนการหรือขนาดชุดที่อยู่อาศัย นี่เล็กกว่ามาก (420,296 kB หรือประมาณ 410 เมกะไบต์) ความแตกต่าง: โปรแกรมของฉันมีการแมป 636 MB ผ่าน mmap () แต่มีการเข้าถึงเพียง 410 MB เท่านั้นดังนั้นจึงมีการกำหนดหน้าเว็บให้เพียง 410 MB เท่านั้น
รายการเดียวที่ผมไม่แน่ใจว่าเกี่ยวกับการSwapspace ปัจจุบันที่ใช้โดยกระบวนการของฉัน ฉันไม่ทราบว่าสิ่งนี้สามารถใช้ได้