ฉันมี CPU I / O รอประมาณ 50% คงที่ แต่เมื่อฉันรันiostat 1
มันจะแสดงกิจกรรมดิสก์เพียงเล็กน้อยหรือไม่มีเลย
อะไรเป็นสาเหตุให้รอโดยไม่ต้องใช้ iops
หมายเหตุ: ไม่มีระบบไฟล์ NFS หรือ FUSE ที่นี่ แต่ใช้ Xen virtualization
iotop
แสดงให้คุณเห็นอะไร?
ฉันมี CPU I / O รอประมาณ 50% คงที่ แต่เมื่อฉันรันiostat 1
มันจะแสดงกิจกรรมดิสก์เพียงเล็กน้อยหรือไม่มีเลย
อะไรเป็นสาเหตุให้รอโดยไม่ต้องใช้ iops
หมายเหตุ: ไม่มีระบบไฟล์ NFS หรือ FUSE ที่นี่ แต่ใช้ Xen virtualization
iotop
แสดงให้คุณเห็นอะไร?
คำตอบ:
NFS สามารถทำสิ่งนี้ได้และจะไม่ทำให้ฉันประหลาดใจหากระบบไฟล์เครือข่ายอื่น ๆ (และแม้แต่อุปกรณ์ที่ใช้ FUSE) มีเอฟเฟกต์ที่คล้ายกัน
มีโอกาสอื่น ๆ บนเซิร์ฟเวอร์ที่กำลัง thrashing ดิสก์หรือไม่
ฉันรู้ด้วยระบบเสมือนจริงที่คุณสามารถรับผลลัพธ์แปลก ๆ ได้หากโหนดโฮสต์โอเวอร์โหลด
หากนี่คือสภาพแวดล้อมของ Amazon EC2 Xen โดยใช้ที่เก็บข้อมูลตามอินสแตนซ์ให้ขอให้ Amazon ตรวจสอบสภาพของโฮสต์ที่มีภาพนี้อยู่
หากนี่คือสภาพแวดล้อม Xen ที่คุณสามารถเข้าถึงไฮเปอร์ไวเซอร์จากนั้นตรวจสอบ IOwait จากโดยไม่ต้องใช้ดิสก์อิมเมจ (ไฟล์เครือข่าย LVM-slice, อะไรก็ตาม) ที่ใช้สำหรับอุปกรณ์ xvda และ xvdb นอกจากนี้คุณจะต้องตรวจสอบระบบ I / O โดยทั่วไปสำหรับไฮเปอร์ไวเซอร์เนื่องจากอุปกรณ์ดิสก์อื่น ๆ อาจผูกขาดทรัพยากรของระบบ
iostat -txk 5
มักจะเป็นเครื่องมือวินิจฉัยที่ดีในการเริ่มต้น ใช้เวลาสรุป 5 วินาทีของ I / O สำหรับอุปกรณ์ทั้งหมดที่มีอยู่และมีประโยชน์ทั้งในและนอกอิมเมจ VM
ตรวจสอบไฟล์ descriptor / inodes ของคุณ เมื่อคุณถึงขีด จำกัด พวกเขาสลับและเลียนแบบ iowait
แก้ไข
ฉันเห็นว่าคุณใช้ xen ดูที่การขัดจังหวะปัจจุบันของคุณคุณอาจพบว่า blkif สูงกว่าปกติ
สายไปหน่อย แต่ติดตั้ง munin แล้วมันจะช่วยแก้จุดบกพร่องในอนาคตได้จริงๆ
sudo sysctl vm.block_dump=1
จากนั้นตรวจสอบ dmesg เพื่อดูสิ่งที่กำลังทำการอ่าน / เขียนหรือ inodes สกปรก
ตรวจสอบข้อ จำกัด nofile ใน limit.conf กระบวนการอาจร้องขอไฟล์มากกว่าที่อนุญาตให้เปิดได้
หากไม่มีเครื่องเสมือนอื่น ๆกำลังทำฮาร์ดดิสก์อยู่ให้ทำ
hdparm -f
บนฟิสิคัลดิสก์พื้นฐาน อาจเป็นไปได้ว่าแคชของดิสก์ทำงานไม่ถูกต้อง นี่จะล้างข้อมูลที่เก็บไว้ในแคชและคุณสามารถตรวจสอบ I / O อย่างต่อเนื่องไม่ว่าจะเพิ่มขึ้นอีกครั้งหลังจากที่ล้างข้อมูล ถ้าใช่มันจะเป็นปัญหาแคช
ด้วยค่าเฉลี่ยของโหลดฉันได้เห็นการดำเนินการเครือข่ายที่ถูกบล็อก (เช่นการโทรไปยังเซิร์ฟเวอร์ฐานข้อมูลภายนอก) เพิ่มขึ้น ฉันไม่แน่ใจ แต่ฉันคาดเดาว่าเครือข่าย IO อาจทำให้ CPU รอขึ้นได้หรือไม่ มีใครยืนยันได้บ้าง
อาจเป็นอุปกรณ์ลูปแบ็คที่ติดตั้งเองผ่านเครือข่าย
บนเครื่องของฉัน NFS เป็น "ผู้สร้าง" IO-WAIT ที่ใหญ่ที่สุด ฉันมี SSD ในแล็ปท็อปของฉันซึ่งเร็วเหมือนนรกดังนั้น "real IO" จึงไม่ใช่ปัญหา อย่างไรก็ตามในบางครั้งฉันมีการรอคอย IO จำนวนมากเนื่องจากการแชร์ NFS ของฉัน
บางครั้ง SCP ก็ดูเหมือนจะนำไปสู่ IO Wait แต่จะขยายออกไปน้อยกว่ามาก
สิ่งนี้สามารถเป็นอะไรก็ได้ หมายความว่ามีบางสิ่งรอการสิ้นสุดของการดำเนินการ I / O คุณสามารถคิดได้ว่ามันประมวลผลผ่าน ps อย่างไรจากนั้นแนบ gdb เข้ากับมันและตรวจสอบ backtrace เพื่อดูว่าการโทรใดหยุดทำงาน (โดยปกติจะเป็นสิ่งที่เกี่ยวข้องกับเครือข่าย สำหรับข้อมูล fd ตรวจสอบ / proc
ฉันยังประสบปัญหาคล้ายกันก่อนที่ดิสก์ใน RAID จะล้มเหลวและสายเคเบิล SATAบางอันที่มีการโค้งงออย่างแน่นหนาในนั้นก็เริ่มล้มเหลว
การใช้ CPU อยู่ใกล้ 0% แต่ CPU 1 ตัวหรือมากกว่าในระบบ 4 คอร์ใช้เวลา 100% ใน IOwait เป็นระยะเวลานาน (พบได้จากtop
การแสดงผลแบบหลายสาย cpu) ที่มี IOps และแบนด์วิดท์ต่ำมาก (พบ ผ่านiostat
) แต่มีกิจกรรมขัดจังหวะสูงมาก การใช้บรรทัดคำสั่งแบบโต้ตอบมีความเจ็บปวดในระหว่างการเข้าถึงดิสก์ (เช่นบันทึกอัตโนมัติจากemacs
เซสชันของใครบางคน) แต่ก็สามารถทนได้เมื่อผ่านช่วงเวลาของ IOwait (และสันนิษฐานว่าการดำเนินการประสบความสำเร็จหลังจากลองหลายครั้ง)