Bagaimana saya bisa mendaftar file yang mengkonsumsi IO teratas?

11

Perangkat lunak manajemen dokumen saya melakukan banyak IO dan saya ingin tahu file mana yang paling diakses.

Apakah ada alat Linux yang akan memberi saya daftar file yang mengkonsumsi IO teratas, seperti iotop tetapi untuk file, setiap beberapa detik?

Itu bisa terlihat seperti:

$ thetool
THRPUT   R/W/SWP FILE
40MB/s   write   /usr/alfresco/repo/1283421/1324928.doc
12MB/s   read    /usr/alfresco/cache/3928dh29f8if
11MB/s   read    /tmp/239398hf2f024f472.tmp

Aku melihat ke dalam halaman manual dari iotop, lsof, stracedan mereka tampaknya tidak menawarkan fitur tersebut.

Nicolas Raoul
sumber
Anda dapat menulis post-prosesor untuk mendapatkan informasi ini dari 'strace', tetapi sejauh yang saya tahu, tidak ada alat seperti itu. (Alat seperti itu akan kehilangan operasi yang terjadi melalui 'mmap'.)
David Schwartz

Jawaban:

2

Saya pikir metrik "jumlah byte" Anda adalah yang salah. Pertimbangkan dua akses. Satu membaca 10MB dari file. Yang lain membaca setiap byte 512 file untuk 10MB pertama. "Jumlah byte" akan menjadi 512 kali lebih tinggi untuk akses pertama dibandingkan dengan yang kedua. Namun mereka berdua akan menempatkan beban yang sama persis pada subsistem I / O.

Jika Anda dapat menerima "jumlah operasi", yang hampir sama baiknya atau seburuk "jumlah byte", maka Anda memiliki sesuatu yang dapat Anda ukur. The inotifywatchProgram melakukan ini, dan kemungkinan bagian dari distribusi Anda inotify-toolspaket.

Ini akan segera memberi tahu Anda file mana yang terdiri dari sebagian besar akses, dan kemungkinan akan memungkinkan Anda untuk memecahkan masalah Anda yang sebenarnya.

David Schwartz
sumber
iotop menggunakan MB / s sebagai metrik, apakah iotop salah? +1 untuk saran inotifywatch Anda, contoh di halaman manual adalah PERSIS apa yang saya butuhkan, dan apa yang saya jelaskan dalam pertanyaan saya. Terima kasih banyak!
Nicolas Raoul
Benar, tetapi 'iotop' tidak dapat mengidentifikasi file, hanya memblokir perangkat. Jadi itu mungkin membantu Anda mengidentifikasi proses masalah dan / atau sistem file / perangkat masalah, tetapi bukan file mana yang diaksesnya. Anda mungkin harus mengumpulkan potongan-potongan dari alat yang berbeda.
David Schwartz
Hum, menarik, terima kasih! Saya bermain dengan inotifywatch sekarang, dan saya akan memeriksa apa yang bisa saya lakukan.
Nicolas Raoul
0

Pertama-tama, untuk mengklarifikasi: Tidak ada yang namanya "IO mengkonsumsi file" . File adalah objek pasif. Ini adalah program yang memicu IO (biasanya dengan membaca / menulis file) dan mereka dapat mengakses file lebih atau kurang sering. Jadi throughput yang Anda sebutkan berkenaan dengan file sebenarnya tidak banyak artinya. Informasi yang berguna mengenai file dapat berupa seberapa sering mereka diakses dan dimodifikasi. Ini dapat dipantau menggunakan notifywait -m /some/file/or/directory(dari alat tidak sah ) atau sistem yang lebih kompleks seperti FAM atau Gamin .

rozcietrzewiacz
sumber
Saya akan menggambarkan "throughput" ini (kata lain mungkin lebih tepat, maaf untuk bahasa Inggris saya) sebagai jumlah byte yang dibaca / ditulis dari / ke file tertentu selama satu detik (jumlah untuk setiap proses yang mengakses file selama itu kedua). Saya harap ini lebih masuk akal. inotifywait, fam, gamin sayangnya hanya memberi tahu saya "File X telah dimodifikasi / dibaca" yang menarik tetapi tidak apa yang saya cari.
Nicolas Raoul