man ps
ในNOTES
ส่วน
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 -p <PID>
แก้ไข : เป็นความคิดเห็นของคุณในคำตอบอื่น ๆ ;
" อืมใช่ฉันสงสัยว่าจะได้รับ (เปอร์เซ็นต์ CPU ทันที) จาก ps "
คำตอบสั้น ๆ : คุณทำไม่ได้
ทำไมถึงเป็นเช่นนั้น
มันเหมือนกับการขอให้ใครบางคนคำนวณความเร็วของรถจากภาพ
ในขณะที่top
เป็นเครื่องมือตรวจสอบps
เป็นเครื่องมือภาพรวม ลองคิดแบบนี้: เมื่อใดก็ตามที่กระบวนการใช้ CPU หรือไม่ ดังนั้นคุณมีโหลด 0% หรือ 100% ในช่วงเวลาที่แน่นอน
การให้: หากps
ควรให้การใช้งาน CPU แบบทันทีมันจะเป็น 0% หรือ 100%
top
ในทางกลับกันเก็บตัวเลขการสำรวจและคำนวณภาระเมื่อเวลาผ่านไป
ps
อาจมีการใช้งานในปัจจุบัน - แต่มันจะต้องอ่านข้อมูลหลาย ๆ ครั้งและพักระหว่างการอ่านแต่ละครั้ง มันไม่ได้
การคำนวณ ps% cpu
ps
คำนวณการใช้ CPU ในลักษณะดังต่อไปนี้:
uptime = ระบบเวลาทั้งหมดกำลังทำงาน
ps_time = เวลาเริ่มต้นกระบวนการวัดเป็นวินาทีจากการบูต
pu_time = กระบวนการเวลาทั้งหมดใช้ CPU
;; กระบวนการวินาทีทำงานแล้ว:
วินาที = เวลาทำงาน - ps_time
;; การใช้งาน:
cpu_usage = pu_time * 1,000 / วินาที
พิมพ์: cpu_usage / 10 "." cpu_usage% 10
ตัวอย่าง:
uptime = 344,545
ps_time = 322,462
pu_time = 3,383
วินาที = 344,545 - 322,462 = 22,083
cpu_usage = 3,383 * 1,000 / 22,083 = 153
พิมพ์: 153/10 "." 153% 10 => 15.3
ดังนั้นจำนวนที่พิมพ์คือเวลากระบวนการที่ใช้ CPU ในช่วงอายุการใช้งาน ดังในตัวอย่างข้างต้น มันทำเช่นนั้นใน 15.3% ของอายุการใช้งาน ใน 84,7% ของเวลาที่ไม่ได้ทำการบั๊กกับ CPU
การดึงข้อมูล
ps
เช่นเดียวกับการtop
ใช้ข้อมูลจากไฟล์ที่เก็บไว้ภายใต้/proc/
- หรือประมวลผลข้อมูลระบบไฟล์หลอก
คุณมีไฟล์บางไฟล์ในรูท/proc/
ซึ่งมีข้อมูลต่าง ๆ เกี่ยวกับสถานะโดยรวมของระบบ นอกจากนี้แต่ละกระบวนการมีโฟลเดอร์ย่อยของตัวเอง/proc/<PID>/
ที่จัดเก็บข้อมูลเฉพาะของกระบวนการ /proc/3038/
ดังนั้นสำหรับตัวอย่างเช่นการดำเนินการจากคำถามของคุณมีโฟลเดอร์ที่
เมื่อps
คำนวณการใช้ CPU จะใช้สองไฟล์:
/ proc / uptime เวลาทำงานของระบบ (วินาที) และจำนวนเวลาที่ใช้ในกระบวนการว่าง (วินาที)
/ proc / [PID] / สถิติข้อมูลสถานะเกี่ยวกับกระบวนการ
- จาก
uptime
นั้นใช้ค่าแรก ( uptime )
- จาก
[PID]/stat
มันใช้ต่อไปนี้:
# ชื่อคำอธิบาย
เวลา CPU ที่ใช้งาน 14 ครั้งในรหัสผู้ใช้วัดเป็นระยะเวลาสั้น ๆ
เวลา CPU 15 ครั้งที่ใช้ในเคอร์เนลโค้ดวัดในระยะเวลาอันสั้น
เวลาซีพียู 16 ครั้งที่ใช้ในรหัสผู้ใช้รวมถึงเวลาจากเด็ก ๆ
เวลา CPU 17ststime ที่ใช้ในโค้ดเคอร์เนลรวมถึงเวลาจากชายด์
22 เวลาเริ่มต้นเวลาที่กระบวนการเริ่มต้นวัดในระยะเวลาอันสั้น
jiffieเป็นเห็บนาฬิกา ดังนั้นนอกจากนี้ยังใช้วิธีการต่าง ๆ เช่น., sysconf(_SC_CLK_TCK)
เพื่อให้ได้ระบบของเฮิร์ตซ์ (จำนวนเห็บต่อวินาที) - ในที่สุดใช้ 100 เป็นตัวเลือกถอยกลับหลังจากหมดทางเลือกอื่น ๆ
ดังนั้นถ้าutime
1234 และเฮิรตซ์เท่ากับ 100 แล้ว:
seconds = utime / Hertz = 1234 / 100 = 12.34
การคำนวณจริงทำได้โดย:
total_time = utime + stime
IF include_dead_children
total_time = total_time + cutime + cstime
ENDIF
seconds = uptime - starttime / Hertz
pcpu = (total_time * 1000 / Hertz) / seconds
print: "%CPU" pcpu / 10 "." pcpu % 10
ตัวอย่าง (ผลลัพธ์จากสคริปต์ Bash ที่กำหนดเอง):
$ ./psw2 30894
System information
uptime : 353,512 seconds
idle : 0
Process information
PID : 30894
filename : plugin-containe
utime : 421,951 jiffies 4,219 seconds
stime : 63,334 jiffies 633 seconds
cutime : 0 jiffies 0 seconds
cstime : 1 jiffies 0 seconds
starttime : 32,246,240 jiffies 322,462 seconds
Process run time : 31,050
Process CPU time : 485,286 jiffies 4,852 seconds
CPU usage since birth: 15.6%
การคำนวณโหลด"ปัจจุบัน"ด้วย ps
นี่คือ (บิต?) ความพยายามที่ร่มรื่น แต่ก็โอเค ให้มีไป
หนึ่งสามารถใช้เวลาให้ps
และคำนวณการใช้ CPU จากนี้ เมื่อคิดเกี่ยวกับมันจริง ๆ แล้วมันอาจจะมีประโยชน์ค่อนข้างมีข้อ จำกัด บางอย่าง
นี่อาจเป็นประโยชน์ในการคำนวณการใช้ CPU ในระยะเวลานาน นั่นคือคุณต้องการตรวจสอบโหลด CPU โดยเฉลี่ยของplugin-container
ใน Firefox ขณะทำงานที่เกี่ยวข้องกับ Firefox
โดยใช้ผลลัพธ์จาก:
$ ps -p -o cputime, etimes
CODE HEADER DESCRIPTION
cputime TIME cumulative CPU time, "[DD-]hh:mm:ss" format. (alias time).
etime ELAPSED elapsed time since the process was started, [DD-]hh:]mm:ss.
etimes ELAPSED elapsed time since the process was started, in seconds.
ฉันใช้etime
ไปetimes
ในตัวอย่างนี้เพื่อคำนวณให้ชัดเจนยิ่งขึ้น นอกจากนี้ฉันเพิ่ม% cpu สำหรับ "ความสนุก" ในเช่นสคริปต์ทุบตีอย่างเห็นได้ชัดจะใช้etimes
- หรืออ่านได้ดีขึ้นจาก/proc/<PID>/
ฯลฯ
Start:
$ ps -p 30894 -o %cpu,cputime,etime,etimes
%CPU TIME ELAPSED ELAPSED
5.9 00:13:55 03:53:56 14036
End:
%CPU TIME ELAPSED ELAPSED
6.2 00:14:45 03:56:07 14167
Calculate times:
13 * 60 + 55 = 835 (cputime this far)
3 * 3,600 + 53 * 60 + 56 = 14,036 (time running this far)
14 * 60 + 45 = 885 (cputime at end)
3 * 3,600 + 56 * 60 + 7 = 14,167 (time running at end)
Calculate percent load:
((885 - 835) / (14,167 - 14,036)) * 100 = 38
กระบวนการใช้ CPU 38% ของเวลาในระหว่างช่วงเวลานี้
ดูรหัส
ถ้าคุณต้องการที่จะรู้ว่าps
มันเป็นอย่างไรและรู้ว่า C น้อยทำอย่างไร (ดูเหมือนว่าคุณเรียกใช้ Gnome Debain deriavnt) - ทัศนคติที่ดีในรหัสที่เกี่ยวกับความคิดเห็น ฯลฯ :
apt-get source procps
cd procps*/ps
vim HACKING
top
และการตรวจสอบอย่างต่อเนื่อง - หรือสแนปโดยล่าช้า aka "ps
" ด้วยโหลด CPU ปัจจุบัน