ฉันจะตรวจสอบการโหลดฮาร์ดดิสก์บน Linux ได้อย่างไร


101

มีอรรถประโยชน์บรรทัดคำสั่งที่ดีในการตรวจสอบการโหลดฮาร์ดดิสก์บน linux หรือไม่ สิ่งที่ชอบtopแต่จากนั้นตรวจสอบกิจกรรมดิสก์ iso cpu การใช้งาน

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

เครื่องมือในอุดมคติของฉันจะเป็นสิ่งที่พิมพ์ว่า "คุณกำลังใช้แบนด์วิดท์ดิสก์ 35% ในตอนนี้" ความคิดใด ๆ


1
คำถามที่สมบูรณ์แบบเป็นสิ่งที่ฉันกำลังมองหา =)
— rafa.ferreira

มันเป็นไปได้ที่จะอ่าน sysfs /sys/block/sda/statโดยตรงเช่น ฟิลด์ # 1 ให้จำนวนการอ่านทั้งหมด # ฟิลด์ # 5 คือ # ทั้งหมดของการเขียนฟิลด์ # 9 คือจำนวนการดำเนินการ I / O ที่กำลังดำเนินการ ดูเพิ่มเติมในkernel.org/doc/Documentation/iostats.txtค่าที่ไม่ได้ลงชื่อยาวและอาจถูกรวม
— sastanin

นี่เป็นคำถามที่ดีมากเพราะเรามักจะต่อสู้กับปัญหานี้ในเซิร์ฟเวอร์ Plesk how do you do it with SNMP?แต่สิ่งที่ขาดหายไปคือ การลงชื่อเข้าใช้และตรวจสอบสิ่งต่างๆเป็นสิ่งที่ดี แต่มีข้อมูลทางประวัติศาสตร์ที่ต้องการ
— Eugene van der Merwe

คำตอบ:


83

คุณสามารถวัดผลได้ดีโดยใช้iostatเครื่องมือ

% iostat -dx /dev/sda 5

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.78    11.03    1.19    2.82    72.98   111.07    45.80     0.13   32.78   1.60   0.64

การใช้งานดิสก์แสดงอยู่ในคอลัมน์สุดท้าย สิ่งนี้ถูกนิยามว่าเป็น

เปอร์เซ็นต์ของเวลา CPU ระหว่างที่คำขอ I / O ถูกส่งไปยังอุปกรณ์ (การใช้ประโยชน์จากแบนด์วิดธ์สำหรับอุปกรณ์) ความอิ่มตัวของอุปกรณ์เกิดขึ้นเมื่อค่านี้ใกล้เคียงกับ 100%


3
แพคเกจนี้อยู่ใน Debian ถ้ามี? apt-cache dumpไม่ได้ทำอะไรเลยสำหรับ iostat
— hBy2Py

9
@Brian: มันอยู่ในแพคเกจ sysstat (ผ่าน yum ต่อไป ... )
— Joe

ไม่พบสิ่งนี้ใน RHEL 6.5 สามารถใช้ได้กับ RHEL หรือไม่
— Hazok

สามารถทำงานได้โดยไม่ต้องรอต่อไปหรือไม่? พยายามที่จะเรียกใช้อินสแตนซ์เดียวเพื่อรับข้อมูลจากได้รับหมายเลขเดียวกันสันนิษฐานว่ามันไม่สามารถนำตัวอย่าง?
— Wilf

@Hazok มันเป็นส่วนหนึ่งของ sysstat RPM บน RHEL 6.5
— TheGeneral

81

ไอโซโทปคือเวอร์ชันบนสุดที่พิจารณาว่า IO แต่ละกระบวนการใช้งานเท่าใด มันอยู่ในคลังเก็บอูบุนตูมาตรฐาน ฉันไม่รู้ว่ามันอยู่ใน RHEL หรือ Fedora แต่มันควรจะเป็น

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

สำหรับเมล็ดที่แก่กว่า (พูด CentOS 5.x หรือ RHEL 5.x) ที่ไม่สนับสนุน iotop ให้ใช้ topio แทน (จัดทำเอกสารไว้ที่นี่: http://yong321.freeshell.org/freeware/pio.html#linuxขึ้นอยู่กับ / proc // io สำหรับสถิติ io และให้ฟังก์ชันการทำงานที่คล้ายคลึงกับ iotop ดูลิงก์สำหรับรายละเอียดเพิ่มเติม


1
แท้จริงมันไม่ได้ติดตั้งโดยเริ่มต้นใน Ubuntu ดังนั้นหนึ่งสามารถออก: sudo apt-get install iotop จะได้รับมัน
— Moshe

1
iotop ต้องการเคอร์เนลที่สูงกว่า 2.6.20 ซึ่งน่าเสียดายว่าทั้ง RedHat el4 และ el5
— Dave Cheney

2
ในฐานะของ RedHat 5.4 บิตที่ต้องใช้เพื่อทำให้ไอโซโทปทำงานได้รับการย้อนกลับ สนุก!
— Dave Cheney

มันอยู่ใน Fedora :)
— jamie

13

ที่แนะนำโดย sastanin ในความคิดเห็นของคุณสามารถประมวลผลค่าโดยตรงได้รับในหรือ/sys/block/sda/stat /proc/diskstatsสิ่งนี้อาจมีประโยชน์เมื่อไม่มีเครื่องมืออื่นที่กล่าวถึงและคุณไม่สามารถติดตั้งได้อย่างง่ายดาย

เช่น (IIUC) บางอย่างเช่นนี้ (เป็น bash) ควรให้จำนวนการอ่านต่อวินาที:

OLD=`awk '{print $1}' /sys/block/sda/stat` # First field is number of read I/Os processed
DT=1
for ii in `seq 1 10`
do
    sleep $DT
    NEW=`awk '{print $1}' /sys/block/sda/stat`
    echo $((($NEW-$OLD)/$DT))
    OLD=$NEW
done

ดูhttps://www.kernel.org/doc/Documentation/iostats.txtและhttps://www.kernel.org/doc/Documentation/block/stat.txtสำหรับเอกสารประกอบ



5

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


5

เพื่อค้นหาว่าแบนด์วิธรวมของคุณคืออะไรคุณอาจใช้ hdparm -T /dev/sdaทดสอบประสิทธิภาพแคชบัฟเฟอร์ (fileio) hdparm -t /dev/sdaเพื่อทดสอบประสิทธิภาพการอ่านของอุปกรณ์

ตัวอย่าง: แล็ปท็อปของฉันได้รับ 82MB / วินาทีจากดิสก์ SATA และ 2GB / วินาทีจากแคช dekstop ของฉันได้รับ 12GB / วินาทีจากแคชและ 500MB / วินาทีจากอาร์เรย์ HW RAID ฉันสงสัยว่าตัวเลขสุดท้ายเหล่านั้นอาจเป็นสองเท่าบนฮาร์ดแวร์คลาสเซิร์ฟเวอร์

ชุดหัวอ่านสูงกว่า 256, 4096 เหมาะที่สุดสำหรับฉัน

for i in 128 256 512 1024 2048 4096 8192 16384 32768  
do  
hdparm --setra $i  
  for j in 1 2 4 8 16 32  
  do  
  time dd if=/dev/sda of=/dev/null bs="$j"k  count=<fixthis> 1GB / blocksize  
  done  
done  

เวลาอ่าน 1GB ที่ขนาดบล็อกต่างกันและหัวอ่านที่แตกต่างกัน


ยินดีต้อนรับสู่ SF คุณสามารถใช้การเน้นโค้ดในโพสต์ของคุณโดยใส่ backquotes รอบ ๆ สตริงหรือย่อหน้า
— inkaphink

สองสิ่ง - 1) --setraคือตอนนี้-aและ 2) hdparm -{T,t}คำสั่งจะอ่านเฉพาะดิสก์ตามstraceเท่านั้นดังนั้นจึงไม่ทำลาย (ข้อจำกัดความรับผิดชอบมาตรฐานเกี่ยวกับคำแนะนำเกี่ยวกับอินเทอร์เน็ต)
— i336_

4

iostatเครื่องมือมาตรฐานสำหรับการแสดงการโหลดฮาร์ดดิสก์

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


3

ฉันคิดว่า RRDtool ควรทำสิ่งที่คุณต้องการที่นี่โดยใช้ daemon เพื่อถ่ายโอนข้อมูลระบบแล้วอนุญาตให้คุณดำเนินการตามที่คุณต้องการ ฉันมักจะใช้มันเพื่อผลิตกราฟ ฯลฯ เพื่อวัดภาระของระบบ

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