GNU/Linux >> Belajar Linux >  >> Linux

Linux – Menentukan File Tertentu yang Bertanggung Jawab Untuk I/o Tinggi?

Ini adalah masalah sederhana tetapi pertama kali saya harus benar-benar memperbaikinya:menemukan file/inode spesifik mana yang menjadi target I/O paling banyak. Saya ingin mendapatkan gambaran umum sistem, tetapi jika saya harus memberikan PID atau TID, saya setuju.

Saya ingin pergi tanpa harus melakukan strace pada program yang muncul di iotop . Lebih disukai, menggunakan alat yang serupa dengan iotop tapi satu yang merinci berdasarkan file. Saya dapat menggunakan lsof untuk melihat file mana yang telah dibuka oleh tukang pos tetapi tidak menunjukkan file mana yang menerima I/O atau berapa banyak.

Saya telah melihat di tempat lain di mana disarankan untuk menggunakan auditd tapi saya lebih suka untuk tidak melakukannya karena itu akan memasukkan informasi ke dalam file audit kami, yang kami gunakan untuk tujuan lain dan ini sepertinya masalah yang harus saya teliti dengan cara ini.

Masalah khusus yang saya miliki saat ini adalah pengisian snapshot LVM terlalu cepat. Sejak itu saya telah menyelesaikan masalah tetapi ingin dapat memperbaikinya dengan cara ini daripada hanya melakukan ls pada semua deskriptor file yang terbuka di /proc/<pid>/fd untuk melihat mana yang tumbuh paling cepat.

Jawaban yang Diterima:

Ada beberapa aspek dari pertanyaan ini yang sebagian telah dijawab melalui alat lain, tetapi tampaknya tidak ada alat tunggal yang menyediakan semua fitur yang Anda cari.

iotop

Alat ini menunjukkan proses mana yang paling banyak menggunakan I/O. Tetapi tidak memiliki opsi untuk menampilkan nama file tertentu.

$ sudo iotop
Total DISK READ:       0.00 B/s | Total DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                        
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    5 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/u:0]
    6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]

Secara default ia melakukan apa yang biasa top tidak untuk proses yang memperebutkan waktu CPU, kecuali untuk I/O disk. Anda dapat membujuknya untuk memberi Anda pandangan 30.000 kaki dengan menggunakan -a beralih sehingga menunjukkan akumulasi oleh proses, dari waktu ke waktu.

$ sudo iotop -a
Total DISK READ:       0.00 B/s | Total DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                        
  258 be/3 root          0.00 B    896.00 K  0.00 %  0.46 % [jbd2/dm-0-8]
22698 be/4 emma          0.00 B     72.00 K  0.00 %  0.00 % chrome
22712 be/4 emma          0.00 B    172.00 K  0.00 %  0.00 % chrome
 1177 be/4 root          0.00 B     36.00 K  0.00 %  0.00 % cupsd -F
22711 be/4 emma          0.00 B    120.00 K  0.00 %  0.00 % chrome
22703 be/4 emma          0.00 B     32.00 K  0.00 %  0.00 % chrome
22722 be/4 emma          0.00 B     12.00 K  0.00 %  0.00 % chrome

i* alat (notify, iwatch, dll.)

Alat-alat ini menyediakan akses ke peristiwa akses file, namun mereka harus ditargetkan secara khusus ke direktori atau file tertentu. Jadi mereka tidak begitu membantu saat mencoba melacak akses file jahat dengan proses yang tidak diketahui, saat men-debug masalah kinerja.

Juga inotify framework tidak memberikan rincian tentang file yang sedang diakses. Hanya jenis aksesnya, jadi tidak ada informasi tentang jumlah data yang dipindahkan bolak-balik yang tersedia, menggunakan alat ini.

Terkait:Linux – tombol remap keras keyboard?

iostat

Menunjukkan kinerja keseluruhan (membaca &menulis) berdasarkan akses ke perangkat tertentu (hard drive) atau partisi. Namun tidak memberikan wawasan apa pun tentang file mana yang menghasilkan akses ini.

$ iostat -htx 1 1
Linux 3.5.0-19-generic (manny)  08/18/2013  _x86_64_    (3 CPU)

08/18/2013 10:15:38 PM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          18.41    0.00    1.98    0.11    0.00   79.49

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda
                  0.01     0.67    0.09    0.87     1.45    16.27    37.06     0.01   10.92   11.86   10.82   5.02   0.48
dm-0
                  0.00     0.00    0.09    1.42     1.42    16.21    23.41     0.01    9.95   12.22    9.81   3.19   0.48
dm-1
                  0.00     0.00    0.00    0.02     0.01     0.06     8.00     0.00  175.77   24.68  204.11   1.43   0.00

blktrace

Opsi ini levelnya terlalu rendah. Itu tidak memiliki visibilitas ke file dan/atau inode mana yang sedang diakses, hanya nomor blok mentah.

$ sudo blktrace -d /dev/sda -o - | blkparse -i -
  8,5    0        1     0.000000000   258  A WBS 0 + 0 <- (252,0) 0
  8,0    0        2     0.000001644   258  Q WBS [(null)]
  8,0    0        3     0.000007636   258  G WBS [(null)]
  8,0    0        4     0.000011344   258  I WBS [(null)]
  8,5    2        1 1266874889.709032673   258  A  WS 852117920 + 8 <- (252,0) 852115872
  8,0    2        2 1266874889.709033751   258  A  WS 852619680 + 8 <- (8,5) 852117920
  8,0    2        3 1266874889.709034966   258  Q  WS 852619680 + 8 [jbd2/dm-0-8]
  8,0    2        4 1266874889.709043188   258  G  WS 852619680 + 8 [jbd2/dm-0-8]
  8,0    2        5 1266874889.709045444   258  P   N [jbd2/dm-0-8]
  8,0    2        6 1266874889.709051409   258  I  WS 852619680 + 8 [jbd2/dm-0-8]
  8,0    2        7 1266874889.709053080   258  U   N [jbd2/dm-0-8] 1
  8,0    2        8 1266874889.709056385   258  D  WS 852619680 + 8 [jbd2/dm-0-8]
  8,5    2        9 1266874889.709111456   258  A  WS 482763752 + 8 <- (252,0) 482761704
...
^C
...
Total (8,0):
 Reads Queued:           0,        0KiB  Writes Queued:           7,       24KiB
 Read Dispatches:        0,        0KiB  Write Dispatches:        3,       24KiB
 Reads Requeued:         0       Writes Requeued:         0
 Reads Completed:        0,        0KiB  Writes Completed:        5,       24KiB
 Read Merges:            0,        0KiB  Write Merges:            3,       12KiB
 IO unplugs:             2           Timer unplugs:           0

Throughput (R/W): 0KiB/s / 510KiB/s
Events (8,0): 43 entries
Skips: 0 forward (0 -   0.0%)

fatrace

Ini adalah tambahan baru untuk Kernel Linux dan yang disambut baik, jadi hanya ada di distro yang lebih baru seperti Ubuntu 12.10. Sistem Fedora 14 saya kurang 8-).

Ini memberikan akses yang sama yang bisa Anda dapatkan melalui inotify tanpa harus menargetkan direktori dan/atau file tertentu.

$ sudo fatrace
pickup(4910): O /var/spool/postfix/maildrop
pickup(4910): C /var/spool/postfix/maildrop
sshd(4927): CO /etc/group
sshd(4927): CO /etc/passwd
sshd(4927): RCO /var/log/lastlog
sshd(4927): CWO /var/log/wtmp
sshd(4927): CWO /var/log/lastlog
sshd(6808): RO /bin/dash
sshd(6808): RO /lib/x86_64-linux-gnu/ld-2.15.so
sh(6808): R /lib/x86_64-linux-gnu/ld-2.15.so
sh(6808): O /etc/ld.so.cache
sh(6808): O /lib/x86_64-linux-gnu/libc-2.15.so

Di atas menunjukkan kepada Anda ID proses yang melakukan pengaksesan file dan file mana yang diaksesnya, tetapi tidak memberi Anda penggunaan bandwidth secara keseluruhan, sehingga setiap akses tidak dapat dibedakan dengan akses lainnya.

Jadi apa yang harus dilakukan?

fatrace opsi menunjukkan yang paling menjanjikan untuk AKHIRNYA menyediakan alat yang dapat menunjukkan kepada Anda penggunaan agregat I/O disk berdasarkan file yang sedang diakses, daripada proses yang melakukan pengaksesan.

Referensi

  • fatrace:melaporkan peristiwa akses file di seluruh sistem
  • fatrace – melaporkan kejadian akses file di seluruh sistem
  • ABI baru lainnya untuk fanotify
  • Panduan Pengguna blktrace

Linux
  1. Popsicle – Beberapa Flasher File USB untuk Linux

  2. Cara menonaktifkan perintah khusus untuk pengguna tertentu di Linux

  3. Bagaimana cara melakukan I/O tingkat rendah pada file perangkat Linux dengan Python?

  1. Kesalahan I/O di Linux:tidak dapat menghapus direktori sebagai root

  2. Linux:Apakah ada yang mirip dengan top untuk I/O?

  3. I/O disk OOM Linux. Juga:tukar, apa gunanya?

  1. 10 alias Bash yang berguna untuk Linux

  2. Perintah Linux wc Dijelaskan untuk Pemula (6 Contoh)

  3. Bagaimana cara memaksa izin khusus untuk file/folder baru di server file Linux?