ทำให้การใช้ cpu เหมือนเดิมทุกครั้ง


13

เมื่อฉันรันคำสั่งต่อไปนี้เพื่อรับการใช้งาน cpu ฉันได้รับการใช้งาน cpu ดี + ผู้ใช้

top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}' 

เอาท์พุท:

14.5

ที่นี่ฉันได้รับปัญหาคือผลลัพธ์ขึ้นอยู่กับคำสั่งด้านบนจึงไม่เปลี่ยนทันทีเป็นคำสั่งด้านบน ดังนั้นฉันจึงไม่ได้รับซีพียูที่ถูกต้องทันที มันให้ผลลัพธ์เดียวกันและไม่เปลี่ยนแปลง

ฉันต้องการรับ cpuusage แบบเรียลไทม์ โปรดช่วยฉันปรับปรุงคำสั่งของฉัน


1
และคำถามคือ?
Dennis Kaarsemaker

timeลองใช้คำสั่งใช้ได้กับ ในระบบของฉันใช้เวลาเพียง 0.165 วินาที
สามารถใช้งานได้

โปรดให้ฉันแก้ไขคำสั่ง
Ketan Patel

ลอง:time (top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}' )
ทำให้หมดกำลังใจ

ไม่มีความแตกต่างในเอาต์พุตหลังจากทดสอบในระบบที่แตกต่างกัน
Ketan Patel

คำตอบ:


13

คุณถูกต้องtopดูเหมือนจะให้การใช้งาน CPU ที่ไม่ถูกต้องในการทำซ้ำครั้งแรก คุณสามารถแก้ไขปัญหานี้ได้ดังนี้:

top -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{print $2 + $4}'

แน่นอนว่าจะใช้เวลาสองเท่า แต่จะใช้งานได้

หากคุณยังต้องการให้ทำงานเร็วขึ้นคุณสามารถใช้-dตัวเลือกเช่นสำหรับระยะเวลาการวัดรวม 1 วินาทีใช้ครึ่งหนึ่งของมัน:

top -d 0.5 -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{print $2 + $4}'

serverfault.com/a/436499/134517 และมันจะใช้เวลามากกว่าสองเท่าเพราะจะใช้เวลาประมาณหนึ่งวินาทีแทนที่จะเกือบจะไม่มีเลย
altendky

นอกเหนือจากความคิดเห็นโดย altendky ดูคำตอบโดย terdonสำหรับคำอธิบายว่าทำไมปัญหามีอยู่ในสถานที่แรก
Ruslan

6

ในทางเทคนิคครั้งแรกtopไม่ได้ส่งออกค่าเดียวกันเสมอไป มันเพียงแค่ส่งเอาต์พุตโหลด CPU เฉลี่ยตั้งแต่การบู๊ตครั้งล่าสุด เนื่องจากtopใช้เดลต้าของ/proc/statสถิติในการคำนวณโหลด CPU ค่าแรกจะถูกคำนวณขณะเปรียบเทียบกับศูนย์ทำให้ได้ผลลัพธ์ที่ไม่ถูกต้อง (แต่ WAD)

หากคุณไม่ต้องการใช้topคุณสามารถแยกวิเคราะห์ได้โดยตรง/proc/stat:

cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{print ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5) "%"}'

นอกจากนี้ยังเร็วกว่าและแม่นยำกว่าด้วยวิธีนี้

คุณสามารถทดสอบด้วยstress:

stress -c 1 -q &

และทำ

killall stress

หลังจาก.


ดี และถ้าคำสั่งของคุณถูกวางไว้ในไฟล์ชื่อ 'cpu' คุณก็watchสามารถรันมันได้:watch -n1 "bash ./cpu"
Brent Faust

สคริปต์การแยกวิเคราะห์ awk ของคุณ/proc/statค่อนข้างเจ๋ง แต่ดูเหมือนว่าจะมีข้อเสียเปรียบเช่นเดียวกับการทำซ้ำครั้งแรกของด้านบน: มันจะส่งผลให้โหลด CPU โดยเฉลี่ยนับตั้งแต่การบู๊ตครั้งสุดท้ายไม่ใช่ครั้งปัจจุบัน
pieroxy

5

เพียงเพื่อขยายคำตอบของ @ Ruslan topแยกการใช้งาน CPU ระหว่างผู้ใช้กระบวนการของระบบและniceกระบวนการเราต้องการผลรวมของทั้งสาม ดังนั้นเราสามารถเรียกใช้topในbโหมด atch ซึ่งช่วยให้เราสามารถแยกเอาท์พุทของมัน อย่างไรก็ตามตามที่อธิบายไว้ที่นี่การทำซ้ำครั้งที่ 1 ของtop -bผลตอบแทนร้อยละตั้งแต่บูตเราจึงต้องอย่างน้อยสองซ้ำ ( -n 2) เพื่อให้ได้เปอร์เซ็นต์ปัจจุบัน เพื่อเพิ่มความเร็วของสิ่งต่างๆคุณสามารถตั้งค่าdelay ระหว่างการวนซ้ำเป็น0.01:

top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'


0

ใช้คำสั่ง watch หรือสำหรับ loop in shell

กล่าวคือ watch -n1 "top -b -n1 | grep 'Cpu(s)' | awk '{print \$2 + \$4}'"


สิ่งเดียวกันเกิดขึ้นกับนาฬิกา
Ketan Patel

0

ทำไมคุณถึงสนใจการใช้งาน CPU เฉลี่ยโหลดเป็นตัวบ่งชี้ที่ดีมาก:

cat /proc/loadavg

หากคุณต้องการใช้งาน CPU อย่างแท้จริงการแยกวิเคราะห์/proc/statน่าจะเป็นวิธี


1
โหลดเฉลี่ยนั้นเป็นส่วนสำคัญของการใช้งาน CPU (หารด้วยเวลา) ทำไมคุณถึงบอกว่าคุณสมบัติที่สำคัญคือตัวบ่งชี้ที่ดีกว่าทุกอย่างเมื่อเทียบกับกรณีที่แตกต่างไปจากเดิมอย่างสิ้นเชิง? นอกจากนี้ยัง/proc/statไม่ให้การใช้งาน CPU เหมือนเดิมเราต้องอ่านสองครั้งด้วยเวลาระหว่างอ่านและทำการคำนวณเพื่อรับการใช้งาน CPU นี่คือสิ่งที่topทำ
Ruslan

ฉันไม่สามารถคณิตศาสตร์ได้ดังนั้นฉันต้องยอมรับว่าฉันไม่เข้าใจความแตกต่างระหว่างอินทิกรัลและดิฟเฟอเรนเชียล: / "โดยเฉลี่ยโหลดนั้นเป็นส่วนสำคัญของการใช้งาน CPU" - จริงเหรอ? AFAIK กระบวนการที่ค้างในสถานะ D ทำให้โหลดเพิ่มขึ้น แต่ไม่มีการใช้งาน CPU "ทำไมคุณจะพูดว่า ..." - OP ไม่ได้บอกว่าสิ่งที่เขาจริงๆต้องการที่จะประสบความสำเร็จดังนั้นจะซื่อสัตย์ผมเพียง แต่คิดว่าเขาต้องการที่จะวัดความเร็วในการโหลดระบบของเขาและคิดว่าการใช้งาน CPU จะเป็นตัวบ่งชี้ที่ดีที่สุดสำหรับนี้ ดังนั้นฉันจึงสั่งให้เขาโหลดโดยเฉลี่ย
Martin von Wittich

จากลิงก์ของคุณ: "ระบบคำนวณค่าเฉลี่ยของโหลดเป็นค่าเฉลี่ยเคลื่อนที่แบบเลขชี้กำลัง / น้ำหนักถ่วงของเลขโหลด และ "ภาระของระบบเป็นการวัดปริมาณงานคำนวณ" สถานะ D ไม่ได้ทำงานกับการคำนวณใด ๆ สิ่งที่กำลังทำคือกระบวนการที่ใช้เวลา CPU ดังนั้นภาระเฉลี่ยโดยทั่วไปร้อยละของ CPU เวลาไม่ได้ใช้งานเป็นระยะเวลาหนึ่ง (พูดนาทีถึงหลายสิบนาที) และการใช้งาน CPU เป็นเปอร์เซ็นต์ของเวลา CPU ไม่ได้ใช้งานในระดับเวลาเป็นมิลลิวินาที - เช่นอัปเดตทุกครั้งที่คุณอ่านและแสดงสถานะปัจจุบัน
Ruslan

-2

การใช้sarคำสั่ง

sar 1 10

ซึ่งหมายความว่า: รับผล 10 ครั้งในทุก ๆ วินาที

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.