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.
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