ฉันจะตรวจสอบการโหลดฮาร์ดดิสก์บน 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.