มีสองวิธีที่เป็นไปได้ที่คุณสามารถทำได้ โปรดทราบว่ามันมีความเป็นไปได้ที่กระบวนการหลายอย่างในสถานการณ์จำลองที่ก่อให้เกิดสิ่งนี้ไม่ใช่เพียงกระบวนการเดียว
วิธีแรกคือการตั้งค่า 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
คอลัมน์มีการเรียงลำดับดังนี้:
- จำนวนการโทร
- เปอร์เซ็นต์ของการโทร
- จำนวนของเวลาจริงที่ใช้ในกระบวนการทั้งหมดของประเภทนี้
- ร้อยละ
- เวลา CPU ของผู้ใช้
- ร้อยละ
- เวลา CPU ของระบบ
- การโทร IO โดยเฉลี่ย
- ร้อยละ
- ชื่อคำสั่ง
สิ่งที่คุณกำลังมองหาคือประเภทกระบวนการที่สร้างเวลาผู้ใช้ / 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
สิ่งนี้อาจให้คำแนะนำบางอย่างแก่คุณเช่นกันสำหรับสิ่งที่อาจทำให้เกิดปัญหา