ทำไมโหลดถึงสูงถึงแม้ว่า CPU หรือดิสก์จะไม่ใช้งานมากเกินไป


20

ฉันได้รับผลลัพธ์ต่อไปนี้จากtop:

Cpu(s): 43.8%us, 32.5%sy,  4.8%ni,  2.0%id, 15.6%wa,  0.2%hi,  1.2%si,  0.0%st
Mem:  16331504k total, 15759412k used,   572092k free,  4575980k buffers
Swap:  4194296k total,   260644k used,  3933652k free,  1588044k cached

ผลลัพธ์จากการiostat -xk 6แสดงดังต่อไปนี้:

Device: rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda       0.00   360.20   86.20  153.40  1133.60  2054.40    26.61     1.51    6.27   0.77  18.38
sdb       0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd      22.60   198.80   17.40   31.60   265.60   921.60    48.46     0.18    3.70   1.67   8.20
sdc      16.80   218.20   22.20   23.40   261.60   966.40    53.86     0.21    4.56   1.49   6.78

จากที่กล่าวมาข้างต้นดูเหมือนว่ามีบางสิ่งที่ต้องบรรทุกมากเกินไป แต่อะไร?

คำถาม

  1. หากไม่ใช่ฮาร์ดดิสก์หรือซีพียูแล้วมันคืออะไร
  2. ดูเหมือนว่า 15.6% ของเวลา CPU จะรออยู่ มันจะรออะไรกันแน่?

2
ข้อมูลจำเพาะของซีพียูคืออะไรและโหลดเท่าใด
sepehr

โหลดมีมากกว่า 100
4951

load สัมพันธ์กับจำนวน cpu's และ cpu cores, ข้อมูลจำเพาะ cpu ของระบบของคุณคืออะไร?
sepehr

คำตอบ:


49

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

โหลดถูกกำหนดเป็นจำนวนกระบวนการที่รอทรัพยากรระบบ นี่คือ CPU, ดิสก์หรือเครือข่ายทั่วไป แต่สามารถเป็นฮาร์ดแวร์อะไรก็ได้
"กระบวนการ" ไม่จำเป็นต้องเป็นกระบวนการที่สมบูรณ์เช่นกัน เธรดถูกกำหนดเป็น "กระบวนการแบบ Lightweight" และแต่ละเธรดที่รอเพิ่มจำนวนการโหลด


หากต้องการทราบว่ากระบวนการใดเป็นปัญหา:

เรียกใช้top -H(การ-Hเปิดใช้งานการแสดงหัวข้อ)

แป้นพิมพ์ลัดแตกต่างกันไปตามรุ่น

ด้วยด้านบนที่ใหม่กว่า (3.3 และหลัง):

กดfเพื่อแสดงตัวเลือกฟิลด์
ใช้ปุ่มลูกศรที่จะไปและกดS = Process Status กดเพื่อกลับไปที่หน้าหลัก กด+ เพื่อย้อนกลับการเรียงลำดับs
q
ShiftR

ด้วยด้านบนที่เก่ากว่า (ก่อนหน้า 3.3):

กดShift+ oเพื่อแสดงตัวเลือกการจัดเรียง
จากนั้นwเรียงลำดับตามสถานะกระบวนการ
จากนั้นEnterกลับไปที่หน้าหลัก
จากนั้นShift+ Rเพื่อย้อนกลับการเรียงลำดับ

จากนั้นในSคอลัมน์มองหากระบวนการที่มีDหรือR(ตอนนี้พวกเขาควรจะอยู่ด้านบน) สิ่งเหล่านี้จะเป็นกระบวนการที่มีส่วนช่วยในการโหลดระบบ

หากกระบวนการแสดงDว่านั่นหมายความว่า "การนอนหลับต่อเนื่อง" มักเกิดขึ้นเมื่อกระบวนการกำลังรอ I / O (ดิสก์เครือข่าย ฯลฯ )
หากกระบวนการแสดงRว่านั่นหมายความว่าเป็นการคำนวณปกติ


หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับกระบวนการเหล่านั้นกำลังทำอะไรอยู่:

ด้วยด้านบนที่ใหม่กว่า (3.3 และหลัง):

กดfเพื่อแสดงตัวเลือกฟิลด์
ใช้ปุ่มลูกศรเพื่อไปที่WCHAN = Sleeping in Functionและกดdเพื่อเปิดใช้งาน
จากนั้นqกลับสู่หน้าหลัก

ด้วยด้านบนที่เก่ากว่า (ก่อนหน้า 3.3):

กดfจากนั้นyเพื่อเปิดใช้งานWCHANฟิลด์

หากระบบของคุณมีตัวเลือกเคอร์เนลที่จำเป็นและไฟล์ WCHAN เป็นปัจจุบันในระบบของคุณ(ผมลืมที่มันเป็นและสิ่งที่มันเรียกว่า)ที่WCHANสนามควรจะแสดงให้คุณเห็นสิ่งฟังก์ชันเคอร์เนลกระบวนการกำลังทำงานอยู่ (ถ้าสนามเพียงแค่แสดงให้เห็นถึง-หรือ?ทุกอย่างคุณไม่ได้รับการสนับสนุน)
google เล็กน้อยที่นี่และคุณควรจะไป

หากคุณไม่มีการสนับสนุน wchan คุณสามารถลองใช้straceกระบวนการเพื่อค้นหาว่าพวกเขากำลังทำอะไรอยู่ แต่นั่นเป็นวิธีที่ยาก


ฉันมักจะกดลูกศรซ้ายเพื่อเปลี่ยนการจัดเรียง
Nemo

2

กระบวนการของอายุการใช้งานสั้น ๆ เช่นการรวบรวมงานหรือกระบวนการที่ล้มเหลวในการวนซ้ำมักจะมองไม่เห็นในเครื่องมือตรวจสอบเช่นtopหรือ iostat เป็นต้น

ในกรณีดังกล่าว Linux Audit Framework จะช่วย

ผู้ร้ายซึ่งเป็นลูปความล้มเหลวเป็นต้น

while :; do gcc /dev/zero ; done >/dev/null 2>&1

หากต้องการใช้ auditd / auditctl:

apt-get install auditd
auditctl -a task,always
ausearch -i -sc execve

ถูกขโมยจากบันทึกการเปิดตัวกระบวนการทั้งหมด


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

0

ฉันมีสถานการณ์เมื่อ NFS mounts ถูกตัดการเชื่อมต่อและโชคไม่ดีที่ฉันทำผิดพลาดและไม่ได้ใช้ตัวเลือกซอฟต์เมาท์ดังนั้นกระบวนการจำนวนมากจึงหยุดชะงักลงบนเซิร์ฟเวอร์ Linux ของฉันรวมถึงการตรวจสอบ lsof และแม้กระทั่งเซสชันทุบตี ....

หลังจาก unmounting mounts ที่หักระบบจะดูมากเกินไป:

top - 00:03:48 up 15 days, 14:56,  3 users,  load average: 29, 21, 20

สิ่งนี้ดูแย่มาก แต่การใช้งาน CPU ต่ำกว่า 15% และไม่มีดิสก์ I / O ฉันได้รับคำแนะนำให้ผ่าน ps แต่มันก็ไม่ได้ช่วยอะไรเพราะดูเหมือนว่ากระบวนการส่วนใหญ่จะนอนหลับอยู่

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

ดำเนินการ:

ps -e v

และค้นหากระบวนการที่มีDหรือSLในคอลัมน์สถานะ สิ่งเหล่านี้เหมือนกับกระบวนการซอมบี้ แต่ไม่ได้ระบุว่าเป็น Z-zombies

D - หมายถึงส่วนใหญ่ดิสก์ (I / O) แต่ยังถ้าคุณทำงานps -e vกี่ครั้งและยังiostat 3และดูไม่มีกิจกรรมใด ๆ นี้ชี้ให้เห็นว่านี่คือฉันติด / o

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

หลังจากการสอบสวนฉันก็ถูกฆ่าทีละคนและค่าเฉลี่ยการโหลดระบบของฉันก็เป็นปกติ

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