Saya memiliki stat io tinggi. Menulis tinggi. Tetapi file apa yang sedang ditulis?

14
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          11.50    0.02    5.38    0.07    0.00   83.04

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sdc               0.01    89.92    0.26   41.59     3.36   457.19    22.01     0.23    5.60   0.09   0.38
sdb               0.10    15.59    0.40   14.55     8.96   120.57    17.33     0.04    2.91   0.07   0.11
sda               0.13    45.37    0.96    8.09    20.06   213.56    51.63     0.02    2.64   0.16   0.14
sde               0.01    31.83    0.09   11.34     0.94   103.56    18.29     0.04    3.52   0.14   0.16
sdd               0.01    48.01    0.13   19.81     1.58   202.16    20.44     0.11    5.62   0.13   0.25

Apakah ada cara untuk mengetahui file apa yang sedang ditulis? 457 kB / s

Juga mesin linux lain ini memiliki masalah yang sama.

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          20.50    0.00   46.48   20.74    0.00   12.28

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.17    11.61    0.99    3.51    36.65    59.43    42.70     0.10   23.20   3.84   1.73
sdb               0.55   224.18   24.30   97.45   246.48  1287.12    25.19     3.96   32.53   7.88  95.91
sdd               0.53   226.75   25.56   90.96   283.50  1271.69    26.69     3.43   29.44   8.22  95.75
sdc               0.00     1.76    0.28    0.06     4.73     7.26    70.41     0.00   12.00   2.12   0.07
dm-0              0.00     0.00    1.11   14.77    36.41    58.92    12.01     1.00   62.86   1.09   1.74
dm-1              0.00     0.00    0.04    0.12     0.17     0.49     8.00     0.00   21.79   2.47   0.04
dm-2              0.00     0.00    0.01    0.00     0.05     0.01     8.50     0.00    7.90   2.08   0.00

1200 permintaan tulis per detik untuk server yang tidak meng-host apa pun

pengguna4951
sumber

Jawaban:

8

Nah, Anda bisa mencoba perintah berikut yang bekerja untuk saya di RHEL6:

1) Apa pun perangkat yang Anda lihat dalam output "iostat" yang melakukan lebih banyak I / O, gunakan dengan fuserperintah sebagai berikut:

fuser -uvm device

2) Anda akan mendapatkan daftar proses dengan nama pengguna yang menyebabkan lebih banyak I / O. Pilih PID tersebut dan gunakan dalam lsofperintah sebagai berikut:

lsof -p PID | more

3) Anda akan mendapatkan daftar file / direktori bersama dengan pengguna yang melakukan I / O maksimum.

Ravi Trivedi
sumber
root @ host [~] # fuser -uv / home4 root @ host [~] # fuser -uvm / home4 USER PID ACCESS COMMAND / home4: newgames 18297 ..c .. (newgames) php cuntschi 18407 ..c .. ( cuntschi) php newgames 18457 ..c .. (newgames) php
user4951
5

Tampaknya tidak ada alat untuk mengetahui I / O throughput per file selain dalam proses menggunakan file. Tetapi ada cara untuk mengetahui proses I / O throughput.

iotop - Ini adalah utilitas top / iftop yang menunjukkan proses I / O throughput.

Setelah pin menunjukkan proses mana yang memiliki I / O berat, gunakan berikut ini untuk mencari tahu file apa yang sedang digunakan

lsof -c <process name>

Itu harus mempersempit ruang lingkup dan membantu menunjukkan sumber.

John Siu
sumber
bagaimana cara mendapatkan prosesnya? Ia juga tidak menghasilkan apa-apa. Sesuatu sedang menulis begitu banyak hal dan saya tidak tahu apa
user4951
Maaf, saya menaruh utilitas io yang salah. Seharusnya iotoptidak iostat. Saya mengoreksi jawaban saya.
John Siu
(1) Dapatkah Anda juga memperbarui distro apa (redhat / centos / ubuntu ...) yang Anda jalankan? (2) Apakah ini instalasi baru? (3) Adakah berbagi file seperti samba berjalan?
John Siu
3

Anda dapat menggunakan inotifywaitdari inotify-toolsuntuk mencari tahu file mana yang sedang ditulis. Ini tidak akan memberi tahu Anda berapa banyak data yang sedang ditulis, tetapi setidaknya akan memberi tahu Anda file apa yang sedang ditulis saat itu terjadi.

Sebagai contoh, perintah ini akan mencetak nama file segera setelah dibuat, diubah, atau dihapus di /tmp:

$ sudo inotifywait -e modify -e attrib -e move -e create -e delete -m -r /tmp
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
/tmp/ CREATE test
/tmp/ MODIFY test

Sayangnya Anda harus menebak direktori mana yang berisi file yang sedang ditulis. Ini gagal jika Anda mencoba menggunakannya di direktori root, meskipun tampaknya itu dapat ditimpa:

$ sudo inotifywait -e modify -e attrib -e move -e create -e delete -m -r /
Setting up watches.  Beware: since -r was given, this may take a while!
Failed to watch /; upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via `/proc/sys/fs/inotify/max_user_watches'.
Adittes
sumber
2

Gunakan systemtap untuk memonitor setiap syscall write / pwrite. Anda dapat melakukan beberapa akuntansi dan Anda akan melihat file / fd mana yang mendapat paling banyak byte.

Erben Mo
sumber