Linux - ฉันจะดูว่ามีอะไรรอดิสก์ IO


42

ฉันมีเซิร์ฟเวอร์ที่มีโหลดสูงมาก ไม่มีอะไรที่โดดเด่นสำหรับฉันในแง่ของการใช้งาน CPU และไม่ได้สลับกัน

ฉันคิดว่าเป็นเพราะกระบวนการบางอย่างกำลังรอดิสก์ IO และฉันต้องการดูว่ากำลังรออะไร

มีโปรแกรมใดบ้างที่จะแสดงให้ฉันเห็นว่ากระบวนการกำลังรอ IO อยู่หรือไม่? ฉันรู้iotopแต่นั่นแสดงสิ่งที่กำลังทำ IO อยู่ในปัจจุบัน

หรือนี่เป็นคำถามงี่เง่า (ถ้าเป็นเช่นนั้นอธิบายวิธี :))

คำตอบ:


47

คุณสามารถใช้มอนิเตอร์ I / O เช่น iotop แต่จะแสดงเฉพาะกระบวนการหรือเธรดที่มีการดำเนินการ I / O ปัจจุบันเท่านั้น

หากคุณต้องการเรียกดูกระบวนการที่รอ I / O ให้ใช้ watch เพื่อตรวจสอบกระบวนการด้วยค่าสถานะ STAT 'D' ดังนี้:

watch -n 1 "(ps aux | awk '\$8 ~ /D/  { print \$0 }')"

หวาน. สิ่งนี้ช่วยฉันออกไปได้อย่างดี
Stu Thompson

2
หรือคุณสามารถใช้คำสั่ง 'iotop -o' ซึ่งจะแสดงเฉพาะ 'กระบวนการหรือเธรดที่ใช้ I / O' เท่านั้นตาม iotop --help
Ryan

1
@Ryan นอกเหนือจากการไม่ให้iowaitข้อมูลที่iotopจำเป็นต้องใช้สิทธิ์สูง watch, psและawkให้เฉพาะข้อมูลที่จำเป็นและไม่ต้องการสิทธิ์ในการยกระดับ
รวย

4
ฉันจะใช้psสถานะ POSIX ของและawkแก้ไขมันแตกต่างกัน: watch "(ps -eo stat,pid,comm|awk '(NR==1)||(\$1~/D/){print}')"- วิธีนี้คุณจะได้รับส่วนหัวของคอลัมน์และ stat, pid และคำสั่ง
รวย

18

ps axuและค้นหากระบวนการที่อยู่ในสถานะ "D" ขึ้นอยู่กับmanpageของps (1)กระบวนการที่อยู่ในสถานะ D นั้นอยู่ในโหมดสลีปที่ไม่หยุดชะงักซึ่งมักจะหมายถึง 'กำลังรอ IO' น่าเสียดายที่การฆ่ากระบวนการเหล่านี้มักไม่สามารถทำได้


16

คำตอบของ Zanchey เป็นสิ่งที่ดีที่สุดที่ฉันรู้เพื่อค้นหาว่ากำลังรอ IO อะไรอยู่

เมื่อคุณบอกว่าเซิร์ฟเวอร์ของคุณโหลดสูงคุณหมายถึงอะไร โดยเฉพาะอย่างยิ่งบางสิ่งที่ตอบสนองช้า

หากคุณสงสัยว่า Disk IO ของคุณเป็นคอขวดหรือไม่ฉันจะใช้คำสั่ง iostat (ส่วนหนึ่งของแพ็คเกจ sysstat) เพื่อดูว่าดิสก์อยู่ภายใต้ภาระงานหนักหรือไม่

ตัวอย่าง:

[kbrandt@kbrandt-opadmin: ~] iostat -x 1 3                                                                                           

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.38   34.71    2.64    1.18    0.00   59.21 
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.11    17.35    2.21   20.31    46.57   301.40    15.45     2.27  100.66   1.48   3.34
sda1              0.10    17.31    2.21   20.31    46.48   301.10    15.44     2.27  100.66   1.48   3.34
sda2              0.00     0.00    0.00    0.00     0.00     0.00     3.50     0.00   30.00  30.00   0.00
sr0               0.00     0.00    0.00    0.00     0.00     0.00    18.44     0.00  677.67 512.61   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           6.22    0.00    4.31    0.00    0.00   89.47   
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sr0               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

1
มันจะมีประโยชน์ในการอธิบายวิธีตีความผลลัพธ์ของ iostat "เพื่อดูว่าดิสก์ภายใต้ภาระงานหนักหรือไม่"
Scott Buchanan

0

เปิดใช้งานการบันทึกblock_dumpว่ากระบวนการใดที่กำลังดำเนินการบล็อกการอ่าน / เขียน:

echo 1 > /proc/sys/vm/block_dump
tail -f /var/log/syslog

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

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