การใช้งาน CPU CPU และประวัติการดำเนินการ


37

มีวิธีใดบ้างที่จะเห็นว่ากระบวนการใดทำให้เกิดการใช้งาน CPU มากที่สุด?

ฉันมี AMAZON EC2 Linux ซึ่งการใช้งาน CPU สูงถึง 100 เปอร์เซ็นต์และทำให้ฉันรีบูตระบบ ฉันไม่สามารถเข้าสู่ระบบผ่าน SSH (ใช้ผงสำหรับอุดรู)

มีวิธีใดที่จะเห็นสิ่งที่ทำให้เกิดการใช้งาน CPU สูงและกระบวนการใดทำให้เกิดปัญหาดังกล่าว

ฉันรู้เกี่ยวกับsarและtopสั่งการ แต่ไม่สามารถหาประวัติการดำเนินการได้ทุกที่ นี่คือภาพจากเครื่องมือตรวจสอบ Amazon EC2 แต่ฉันอยากจะรู้ว่ากระบวนการใดที่ทำให้:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันได้ลองแล้วps -eo pcpu,args | sort -k 1 -r | head -100แต่ไม่มีโชคในการค้นหาการใช้งาน CPU สูง

คำตอบ:


34

มีสองวิธีที่เป็นไปได้ที่คุณสามารถทำได้ โปรดทราบว่ามันมีความเป็นไปได้ที่กระบวนการหลายอย่างในสถานการณ์จำลองที่ก่อให้เกิดสิ่งนี้ไม่ใช่เพียงกระบวนการเดียว

วิธีแรกคือการตั้งค่า pidstat ให้ทำงานในพื้นหลังและสร้างข้อมูล

pidstat -u 600 >/var/log/pidstats.log & disown $!

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

มีปัญหากับเรื่องนี้เป็นหลักหากกล่องเข้าไปใน cpu ลูปและสร้างภาระมาก - คุณไม่รับประกันว่ากระบวนการที่แท้จริงของคุณจะดำเนินการในเวลาที่เหมาะสมในระหว่างการโหลด (ถ้าเลย) เพื่อให้คุณสามารถพลาดการส่งออกจริง !

วิธีที่สองในการค้นหาสิ่งนี้คือการเปิดใช้งานการบัญชีกระบวนการ อาจเป็นตัวเลือกระยะยาว

accton on

นี่จะเปิดใช้งานการบัญชีกระบวนการ (ถ้ายังไม่ได้เพิ่ม) ถ้ามันไม่ได้ทำงานก่อนหน้านี้จะต้องใช้เวลาในการทำงาน

ต้องทำงานเป็นเวลา 24 ชั่วโมงแล้วคุณสามารถเรียกใช้คำสั่ง (ซึ่งจะสร้างผลลัพธ์เช่นนี้)

# sa --percentages --separate-times
     108  100.00%       7.84re  100.00%       0.00u  100.00%       0.00s  100.00%         0avio     19803k
       2    1.85%       0.00re    0.05%       0.00u   75.00%       0.00s    0.00%         0avio     29328k   troff
       2    1.85%       0.37re    4.73%       0.00u   25.00%       0.00s   44.44%         0avio     29632k   man
       7    6.48%       0.00re    0.01%       0.00u    0.00%       0.00s   44.44%         0avio     28400k   ps
       4    3.70%       0.00re    0.02%       0.00u    0.00%       0.00s   11.11%         0avio      9753k   ***other*
      26   24.07%       0.08re    1.01%       0.00u    0.00%       0.00s    0.00%         0avio      1130k   sa
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28544k   ksmtuned*
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28096k   awk
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     29623k   man*
       7    6.48%       7.00re   89.26%       0.00u    0.00%       0.00s    

คอลัมน์มีการเรียงลำดับดังนี้:

  1. จำนวนการโทร
  2. เปอร์เซ็นต์ของการโทร
  3. จำนวนของเวลาจริงที่ใช้ในกระบวนการทั้งหมดของประเภทนี้
  4. ร้อยละ
  5. เวลา CPU ของผู้ใช้
  6. ร้อยละ
  7. เวลา CPU ของระบบ
  8. การโทร IO โดยเฉลี่ย
  9. ร้อยละ
  10. ชื่อคำสั่ง

สิ่งที่คุณกำลังมองหาคือประเภทกระบวนการที่สร้างเวลาผู้ใช้ / CPU ระบบมากที่สุด

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

สิ่งนี้ไม่ได้ช่วยให้คุณมีความคิดที่ชัดเจนว่ากระบวนการใดที่อาจเป็นสาเหตุของปัญหานี้ แต่อาจทำให้คุณรู้สึกดี อาจเป็นภาพรวม 24 ชั่วโมงมีความเป็นไปได้ของผลลัพธ์ที่เบ้ดังนั้นจำไว้ นอกจากนี้ยังควรเข้าสู่ระบบตลอดเวลาเนื่องจากคุณสมบัติเคอร์เนลและแตกต่างจาก pidstat จะผลิตผลลัพธ์แม้ในช่วงภาระหนัก

ตัวเลือกสุดท้ายที่มีอยู่ยังใช้การบัญชีกระบวนการเพื่อให้คุณสามารถเปิดใช้งานได้ตามข้างบน แต่จากนั้นใช้โปรแกรม "lastcomm" เพื่อสร้างสถิติของกระบวนการที่ดำเนินการในช่วงเวลาที่เกิดปัญหาพร้อมกับสถิติ cpu สำหรับแต่ละกระบวนการ

lastcomm | grep "May  8 22:[01234]"
kworker/1:0       F    root     __         0.00 secs Tue May  8 22:20
sleep                  root     __         0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                   X root     pts/0      0.00 secs Tue May  8 22:49
ksmtuned          F    root     __         0.00 secs Tue May  8 22:49
awk                    root     __         0.00 secs Tue May  8 22:49

สิ่งนี้อาจให้คำแนะนำบางอย่างแก่คุณเช่นกันสำหรับสิ่งที่อาจทำให้เกิดปัญหา


คำตอบที่ดีมากและมีรายละเอียดดีมาก!
Bart De Vos

2
MIfe คุณไม่ได้ใช้บนยอดลองดู! มันรวบรวมข้อมูลเดียวกับ pidstat แต่นำเสนอในอินเทอร์เฟซที่เหมาะสมกว่าสำหรับการสำรวจเชิงโต้ตอบ นอกจากนี้ยังมีคำสั่ง atopsar หากคุณต้องการรายงานสไตล์ sar
sciurus

18

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

บทความให้ความคิดของความสามารถบางอย่างและคุณจะพบมากขึ้นในmanpage

เป็นซอฟต์แวร์ที่ยอดเยี่ยมอย่างแท้จริง


3

โปรแกรมเช่นpsmonและmonitอาจมีประโยชน์สำหรับคุณ สิ่งเหล่านั้นสามารถตรวจสอบกระบวนการที่ทำงานอยู่ในระบบของคุณและหากเกินกว่าเกณฑ์ (การใช้งาน CPU, การใช้หน่วยความจำ ... ) คุณสามารถตั้งค่าให้ส่งรายงานทางอีเมลเกี่ยวกับสิ่งที่เกิดขึ้น

นอกจากนี้ยังเป็นไปได้ที่จะรีสตาร์ทกระบวนการทำงานผิดปกติโดยอัตโนมัติ


0

ทางออกหนึ่งคือการเขียนสคริปต์ที่ทำงานผ่าน cron หนึ่งนาทีหรือใน sleep sleep และส่งอีเมล / scp job / dump ไปยัง ebs volume ... ด้วยเอาต์พุตที่เกี่ยวข้อง (dmesg, pstree -pa และ ps aux, อาจจะเป็น vmstat) ทันทีที่พบค่าเฉลี่ยการโหลดเกินขีด จำกัด ที่กำหนด ...

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