กระบวนการใดที่ใช้ IO ดิสก์ทั้งหมดของฉัน


120

ถ้าฉันใช้ "top" ฉันจะเห็นว่า CPU ตัวไหนไม่ว่างและกระบวนการใดที่ใช้ CPU ทั้งหมดของฉัน

ถ้าฉันใช้ "iostat -x" ฉันสามารถดูไดรฟ์ที่ไม่ว่าง

แต่ฉันจะดูได้อย่างไรว่ากระบวนการใดใช้ปริมาณงานทั้งหมดของไดรฟ์


2
ในทางเทคนิคก็เป็นจริงสำหรับ Linux เช่นกันเนื่องจากผู้ใช้ดำเนินการแก้ไขเฉพาะเพจในแคชของหน้า ... ;)
Damon

แค่คำถามที่ฉันมีและคำตอบที่ฉันกำลังมองหา แต่คำถามแบบนี้ไม่เหมาะกับ SuperUser หรือไม่?
Zeta Two

และนี่คือสาเหตุที่ Linux ด้อยกว่า Solaris และ MacOS เนื่องจากมี dtrace ในตัวซึ่งทำให้สิ่งนี้ง่ายต่อการค้นหา: - /
Thorbjørn Ravn Andersen

คำตอบ:


162

คุณกำลังมองหาiotop(สมมติว่าคุณมีเคอร์เนล> 2.6.20 และ Python 2.5) หากทำไม่สำเร็จคุณกำลังมองหาการเชื่อมต่อกับระบบไฟล์ ฉันขอแนะนำอดีต


8
iotopดูเหมือนว่าจะแสดงแบนด์วิดท์ I / O มากกว่าจำนวน IOPS ที่ใช้โดยกระบวนการ สิ่งนี้ไม่เกี่ยวข้องอย่างยิ่ง กระบวนการที่ทำการเขียน + ซิงค์ขนาดเล็กจำนวนมากจะใช้ความจุ IO ของดิสก์มากกว่ากระบวนการที่เขียนชุดข้อมูลขนาดใหญ่ที่ต่อเนื่องกันด้วยความเร็วสูง
Arnaud Le Blanc

สำหรับการเขียนขนาดเล็กทั้งหมดที่ฉันเห็นอยู่[jdb2/nvme0n1p1]ใน iotop แต่ฉันโชคดีที่ได้เปิดใช้งาน / proc / sys / vm / block_dump และเปรียบเทียบผลลัพธ์กับระบบที่มีประสิทธิภาพ / เสถียรlxadm.com/Simple_filesystem_read/write_tracing_with_/proc/sys/…มันช่วยค้นหา คอนเทนเนอร์นักเทียบท่าที่วางไข่ตามคำขอ kubectl อย่างต่อเนื่องทำให้เครดิตระเบิดของ EBS นั้นหมดไปพร้อมกับรายการใน/home/spinnaker/.kube/cache/discovery/.../serverresources.json. เมื่อคุณ จำกัด ขอบเขตให้แคบลงเป็นชื่อผู้ใช้ / กระบวนการบางอย่างเช่นiotop -atku systemd-network | grep kubectlอาจช่วยได้
Greg Bray

16

หากต้องการทราบว่ากระบวนการใดในสถานะ 'D' (กำลังรอการตอบสนองของดิสก์) กำลังทำงานอยู่:

while true; do date; ps aux | awk '{if($8=="D") print $0;}'; sleep 1; done

หรือ

watch -n1 -d "ps axu | awk '{if (\$8==\"D\") {print \$0}}'"

Wed Aug 29 13:00:46 CLT 2012
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:47 CLT 2012
Wed Aug 29 13:00:48 CLT 2012
Wed Aug 29 13:00:49 CLT 2012
Wed Aug 29 13:00:50 CLT 2012
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:51 CLT 2012
Wed Aug 29 13:00:52 CLT 2012
Wed Aug 29 13:00:53 CLT 2012
Wed Aug 29 13:00:55 CLT 2012
Wed Aug 29 13:00:56 CLT 2012
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:57 CLT 2012
root       302  0.0  0.0      0     0 ?        D    May28   3:07  \_ [kdmflush]
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:58 CLT 2012
root       302  0.0  0.0      0     0 ?        D    May28   3:07  \_ [kdmflush]
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:59 CLT 2012
root       302  0.0  0.0      0     0 ?        D    May28   3:07  \_ [kdmflush]
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:01:00 CLT 2012
root       302  0.0  0.0      0     0 ?        D    May28   3:07  \_ [kdmflush]
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:01:01 CLT 2012
root       302  0.0  0.0      0     0 ?        D    May28   3:07  \_ [kdmflush]
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:01:02 CLT 2012
Wed Aug 29 13:01:03 CLT 2012
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]

ดังที่คุณเห็นจากผลลัพธ์ jdb2 / dm-0-8 (กระบวนการเจอร์นัล ext4) และ kdmflush จะบล็อก Linux ของคุณอยู่ตลอดเวลา

สำหรับรายละเอียดเพิ่มเติม URL นี้อาจเป็นประโยชน์: ปัญหาLinux Wait-IO


11

atopยังทำงานได้ดีและติดตั้งได้ง่ายแม้ในระบบ CentOS 5.x รุ่นเก่าซึ่งไม่สามารถเรียกใช้ iotop ได้ กดdเพื่อแสดงรายละเอียดดิสก์?เพื่อขอความช่วยเหลือ

ATOP - mybox                           2014/09/08  15:26:00                           ------                            10s elapsed
PRC |  sys    0.33s |  user   1.08s |                | #proc    161  |  #zombie    0 |  clones    31 |                | #exit         16  |
CPU |  sys   4% |  user     11% |  irq       0%  | idle    306%  |  wait     79% |               |  steal     1%  | guest     0%  |
cpu |  sys   2% |  user      8% |  irq       0%  | idle     11%  |  cpu000 w 78% |               |  steal     0%  | guest     0%  |
cpu |  sys   1% |  user      1% |  irq       0%  | idle     98%  |  cpu001 w  0% |               |  steal     0%  | guest     0%  |
cpu |  sys   1% |  user      1% |  irq       0%  | idle     99%  |  cpu003 w  0% |               |  steal     0%  | guest     0%  |
cpu |  sys   0% |  user      1% |  irq       0%  | idle     99%  |  cpu002 w  0% |               |  steal     0%  | guest     0%  |
CPL |  avg1    2.09 |  avg5    2.09 |  avg15   2.09  |               |  csw    54184 |  intr   33581 |                | numcpu     4  |
MEM |  tot     8.0G |  free   81.9M |  cache   2.9G  | dirty   0.8M  |  buff  174.7M |  slab  305.0M |                |               |
SWP |  tot     2.0G |  free    2.0G |                |               |               |               |  vmcom   8.4G  | vmlim   6.0G  |
LVM |  Group00-root |  busy     85% |  read       0  | write  30658  |  KiB/w      4 |  MBr/s   0.00 |  MBw/s  11.98  | avio 0.28 ms  |
DSK |          xvdb |  busy     85% |  read       0  | write  23706  |  KiB/w      5 |  MBr/s   0.00 |  MBw/s  11.97  | avio 0.36 ms  |
NET |  transport    |  tcpi    2705 |  tcpo    2008  | udpi      36  |  udpo      43 |  tcpao     14 |  tcppo     45  | tcprs      1  |
NET |  network      |  ipi     2788 |  ipo     2072  | ipfrw      0  |  deliv   2768 |               |  icmpi      7  | icmpo     20  |
NET |  eth0    ---- |  pcki    2344 |  pcko    1623  | si 1455 Kbps  |  so  781 Kbps |  erri       0 |  erro       0  | drpo       0  |
NET |  lo      ---- |  pcki     423 |  pcko     423  | si   88 Kbps  |  so   88 Kbps |  erri           0 |  erro       0  | drpo       0  |
NET |  eth1    ---- |  pcki  22 |  pcko      26  | si    3 Kbps  |  so    5 Kbps |  erri       0 |  erro       0  | drpo       0  |

  PID                   RDDSK                    WRDSK                   WCANCL                    DSK                   CMD        1/1
 9862                      0K                   53124K                       0K                    98%                   java
  358                      0K                     636K                       0K                     1%                   jbd2/dm-0-8
13893                      0K                     192K                      72K                     0%                   java
 1699                      0K                      60K                       0K                     0%                   syslogd
 4668                      0K                      24K                       0K                     0%                   zabbix_agentd

สิ่งนี้แสดงให้เห็นอย่างชัดเจนว่า java pid 9862 เป็นผู้ร้าย


4

TL; DR

หากคุณสามารถใช้ได้iotopให้ทำเช่นนั้น มิฉะนั้นสิ่งนี้อาจช่วยได้


ใช้topแล้วใช้ทางลัดเหล่านี้:

d 1 = set refresh time from 3 to 1 second

1   = show stats for each cpu, not cumulated

สิ่งนี้จะต้องแสดงค่า> 1.0 waสำหรับอย่างน้อยหนึ่งคอร์ - หากไม่มีดิสก์รออยู่ก็ไม่มีการโหลด IO และไม่จำเป็นต้องดูเพิ่มเติม > 15.0 waโหลดอย่างมีนัยสำคัญมักจะเริ่มต้น

x       = highlight current sort column 
< and > = change sort column
R       = reverse sort order

เลือก 'S' คอลัมน์สถานะกระบวนการ ย้อนกลับลำดับการจัดเรียงเพื่อให้กระบวนการ 'R' (กำลังทำงาน) แสดงอยู่ด้านบน หากคุณสามารถมองเห็นกระบวนการ 'D' (กำลังรอดิสก์) แสดงว่าคุณมีตัวบ่งชี้ว่าผู้กระทำผิดของคุณคืออะไร


3

สำหรับผู้ใช้ KDE คุณสามารถใช้การเติม 'ctrl-esc' เรียกใช้การตรวจสอบการทำงานของระบบและมีแผนภูมิกิจกรรม I / O พร้อมรหัสกระบวนการและชื่อ

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


2

คุณได้พิจารณาlsof(รายการไฟล์ที่เปิดอยู่) หรือไม่?


3
ที่แสดงเพียงที่จับไฟล์ที่เปิดไม่ใช่ MB / s สำหรับแต่ละไฟล์ iotop ทำเช่นนั้น
oligofren

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