ฉันจะรับสถิติ CPU ที่คล้ายกันจากเชลล์ได้อย่างไร?


12

ฉันพยายามที่จะได้รับการอ่านที่ถูกต้องของ CPU ที่ใช้ของฉัน (ร้อยละ) topจาก นี่คือคำสั่งที่ฉันใช้สำหรับทดสอบ:

top -n1 | awk '/Cpu\(s\):/ {print $2}'

ผลตอบแทนนี้:

10.7%us,

ฉันต้องการข้อมูลชิ้นใดที่เหมาะสม อย่างไรก็ตามทุกครั้งที่ฉันรันคำสั่งฉันจะได้ผลลัพธ์เดียวกันแม้ว่าฉันจะใช้การโหลดที่แตกต่างกันในระบบของฉัน (และไม่พูดถึงhtopจะบอกว่าการใช้งานของฉันแตกต่างกัน) ดูเหมือนว่าเมื่อใดก็ตามที่ฉันเริ่มtopการใช้งาน CPU ของฉันเหมือนกัน หลังจากนั้นไม่กี่เฟรมก็ให้ค่าที่เหมาะสมกับฉัน

ดูเหมือนว่าฉันจะไม่สามารถแยกเอาท์พุทของ Top ด้วยวิธีนี้ดังนั้นฉันกำลังมองหาแอปพลิเคชั่นที่น่าเชื่อถืออื่น ๆ ซึ่งจะให้การอ่านที่แม่นยำจากเชลล์ ฉันชอบที่htopจะให้การอ่านแบบคอร์ฉันได้อย่างไร

ฉันพยายามiostatแล้วmpstatแต่พวกเขาดูเหมือนจะให้ค่าที่ไม่ถูกต้องและ "ช้าต่อการเปลี่ยนแปลง"


2
อย่า คำถามที่เหมาะสมในการถามคือ: ฉันจะรับสถิติการใช้งานซีพียูที่คล้ายกันจากเชลล์ได้อย่างไร?
Stéphane Gimenez

@ StéphaneGimenezขอบคุณฉันแก้ไขคำถามของฉัน
n0pe

คำตอบ:


12

ฉันใช้สคริปต์นี้ (จากกระทู้นี้บนกระดาน Arch ):

#!/bin/bash
read cpu a b c previdle rest < /proc/stat
prevtotal=$((a+b+c+previdle))
sleep 0.5
read cpu a b c idle rest < /proc/stat
total=$((a+b+c+idle))
CPU=$((100*( (total-prevtotal) - (idle-previdle) ) / (total-prevtotal) ))

Linux มีข้อมูลที่ยอดเยี่ยมใน / proc / - ดูlinux.die.net/man/5/procสำหรับสินค้าทั้งหมด เพียงแค่ระวังว่านี่เป็น Linux เท่านั้น มีจริงๆไม่มีทางข้ามแพลตฟอร์มเพื่อให้ได้ข้อมูลว่าถ้าคุณใช้ห้องสมุดเช่นSigar
Pat Notz

ความคิดนั้นดี แต่รายละเอียดบางอย่างไม่ถูกต้อง ค่าที่ไม่ได้ใช้งานคือคอลัมน์ที่ 5 และคุณควรเพิ่มคอลัมน์ iowait (คอลัมน์ที่ 6) เพื่อให้ได้เปอร์เซ็นต์ที่เหมาะสม เพื่อให้ถูกต้องสมบูรณ์คุณจะต้องเพิ่มค่า "ที่เหลือ" ทั้งหมดด้วย แต่ค่าเหล่านั้นมักจะเล็กมาก
Peter Eisentraut

ค่าว่างเป็นคอลัมน์ที่ห้าหากคุณกำลังนับคอลัมน์ "cpu" มิฉะนั้นจะเป็นที่สี่
SunSparc

6

ตรวจสอบsarเช่นกัน การใช้งานอาจแตกต่างกันอย่างมากจาก nix ถึง nix แต่ควรให้สถิติระบบพื้นฐานแก่คุณในภาพรวมที่ได้รับ ผมไม่แน่ใจว่าวิธีที่ถูกต้องค่าอยู่ที่จุดที่คำสั่งจะเริ่มต้นครั้งแรก แต่คุณอาจจะเล่นรอบ ๆ เพื่อดูวิธีการเปรียบเทียบกับtop, iostatฯลฯ

เอาต์พุตเป็นแบบคอลัมน์เช่นด้านบนดังนั้นคุณควรจะสามารถไพพ์เอาต์พุตawkหรือcutเพื่อจัดการผลลัพธ์


ฉันเคยลองsarมาก่อนด้วยผลการผสม ฉันจะไปกับคำตอบของ @ jasonwryan ที่นี่เพราะฉันสามารถแก้ไขได้อย่างง่ายดายเพื่อแสดงการใช้งานกับแกนประมวลผลทั้งสอง
n0pe


0

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

top -b -n 2 | grep Cpu | tail -1

ฉันชอบที่จะรวมสิ่งนี้เข้ากับเวลาในการโหลดและตัวกรอง grep ของกระบวนการที่เลือกจาก ps เช่นคิวรี postgres จอภาพที่เรียบง่ายสามารถแสดงได้ด้วยนามแฝง:

alias postgresmon="watch -d 'uptime;top -b -n 2 | grep Cpu | tail -1;ps -ef | grep postgres\: | grep -v idle'"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.