Proses apa yang menggunakan semua IO disk saya

120

Jika saya menggunakan "top", saya dapat melihat CPU mana yang sibuk dan proses apa yang menggunakan semua CPU saya.

Jika saya menggunakan "iostat -x", saya dapat melihat drive mana yang sibuk.

Tapi bagaimana cara melihat proses apa yang menggunakan semua throughput drive?

Matthew Crumley
sumber
2
Nah, secara teknis itu juga berlaku untuk Linux, karena proses pengguna hanya memodifikasi halaman di cache halaman ...;)
Damon
Hanya pertanyaan yang saya miliki dan jawaban yang saya cari, tetapi bukankah pertanyaan semacam ini lebih cocok di SuperUser?
Zeta Two
Dan inilah mengapa Linux lebih rendah dari Solaris dan MacOS karena mereka memiliki dtrace bawaan yang membuat hal ini sangat mudah untuk diketahui: - /
Thorbjørn Ravn Andersen

Jawaban:

162

Anda sedang mencari iotop(dengan asumsi Anda memiliki kernel> 2.6.20 dan Python 2.5). Jika gagal, Anda akan mencoba menghubungkan ke sistem file. Saya merekomendasikan yang pertama.

fresus
sumber
8
iotoptampaknya menampilkan bandwidth I / O daripada jumlah IOPS yang dikonsumsi oleh proses. Ini tidak terlalu relevan. Sebuah proses yang melakukan banyak penulisan kecil + sinkronisasi akan menghabiskan lebih banyak kapasitas IO disk daripada proses yang menulis kumpulan data bersebelahan yang besar dengan kecepatan tinggi.
Arnaud Le Blanc
Untuk penulisan kecil yang saya lihat hanyalah [jdb2/nvme0n1p1]di iotop, tetapi saya beruntung dengan mengaktifkan / proc / sys / vm / block_dump dan membandingkan hasilnya dengan sistem yang sehat / stabil lxadm.com/Simple_filesystem_read/write_tracing_with_/proc/sys/… Ini membantu menemukan kontainer buruh pelabuhan yang terus-menerus memunculkan permintaan kubectl, menghabiskan kredit burst volume EBS dengan entri di /home/spinnaker/.kube/cache/discovery/.../serverresources.json. Setelah Anda mempersempit semuanya ke nama pengguna / proses, sesuatu seperti iotop -atku systemd-network | grep kubectlmungkin juga membantu
Greg Bray
16

Untuk mengetahui proses mana dalam status 'D' (menunggu respons disk) yang sedang berjalan:

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

atau

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]

Seperti yang Anda lihat dari hasilnya, jdb2 / dm-0-8 (proses jurnal ext4), dan kdmflush secara konstan memblokir Linux Anda.

Untuk detail lebih lanjut, URL ini dapat membantu: Masalah Tunggu-IO Linux

quentinxue
sumber
11

atop juga berfungsi dengan baik dan menginstal dengan mudah bahkan pada sistem CentOS 5.x lama yang tidak dapat menjalankan iotop. Tekan duntuk menampilkan detail disk, ?untuk bantuan.

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

Ini jelas menunjukkan java pid 9862 adalah pelakunya.

Steve Kehlet
sumber
4

TL; DR

Jika Anda dapat menggunakan iotop, lakukanlah. Lain ini mungkin membantu.


Gunakan top, lalu gunakan pintasan berikut:

d 1 = set refresh time from 3 to 1 second

1   = show stats for each cpu, not cumulated

Ini harus menunjukkan nilai > 1.0 wauntuk setidaknya satu inti - jika tidak ada diskwaits, tidak ada beban IO dan tidak perlu melihat lebih jauh. Beban yang signifikan biasanya dimulai > 15.0 wa.

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

Pilih 'S', kolom status proses. Balik urutan sortir sehingga proses 'R' (berjalan) ditampilkan di atas. Jika Anda dapat melihat proses 'D' (menunggu disk), Anda memiliki indikator apa penyebabnya.

sjas
sumber
3

Untuk Pengguna KDE, Anda dapat menggunakan 'ctrl-esc' top memanggil monitor aktivitas sistem dan ada bagan aktivitas I / O dengan id proses dan nama.

Saya tidak memiliki izin untuk mengunggah gambar, karena 'status pengguna baru' tetapi Anda dapat melihat gambar di bawah ini. Ini memiliki kolom untuk IO baca dan tulis.

Patrick
sumber
2

Sudahkah Anda mempertimbangkan lsof(daftar file yang terbuka)?

apolinsky
sumber
3
yang hanya menampilkan pegangan file yang terbuka, bukan MB / s untuk setiap file. iotop melakukan itu.
oligofren
2

iotop dengan bendera -a:

-a, --accumulated     show accumulated I/O instead of bandwidth
Chris Godwin
sumber