Saya tertarik pada utilitas atau proses untuk memonitor IO disk per file di CentOS.
Pada Win2008, utilitas resmon memungkinkan jenis drilldown ini, tetapi tidak ada utilitas Linux yang saya temukan melakukan ini (iostat, iotop, dstat, nmon).
Ketertarikan saya dalam memantau kemacetan IO di server database. Dengan MSSQL, saya menemukan ini sebagai diagnostik informatif untuk mengetahui file / ruang file mana yang paling parah terkena.
Jawaban:
SystemTap mungkin merupakan pilihan terbaik Anda.
Berikut adalah bagaimana output dari contoh iotime.stp terlihat seperti:
Kerugiannya (selain dari kurva pembelajaran) adalah Anda harus menginstal debug-kernel , yang mungkin tidak dapat dilakukan pada sistem produksi. Namun, Anda dapat menggunakan instrumentasi silang tempat Anda menyusun modul pada sistem pengembangan, dan menjalankan .ko pada sistem produksi.
Atau jika Anda tidak sabar, lihat Bab 4. Script SystemTap yang Berguna dari panduan pemula.
sumber
Script SystemTap * :
Outputnya terlihat seperti ini:
Atau jika Anda memilih untuk hanya menampilkan jalur dari titik mount:
Keterbatasan / bug:
devname
is"N/A"
devname
itu"N/A"
Hasil untuk program Matthew Ife :
untuk pribadi mmaptest :
untuk mmaptest dibagikan:
untuk diotest (I / O langsung):
* Petunjuk pengaturan cepat untuk RHEL 6 atau yang setara:
yum install systemtap
dandebuginfo-install kernel
sumber
task_dentry_path
) :-) Saya tidak tahu tentang I / O itu, tetapi saya bisa mengujinya jika Anda memberi saya perintah atau sebuah program sampel. Misalnya saya menggunakan Python untuk menguji mmap.dd iflag=direct oflag=direct
muncul.Anda sebenarnya ingin menggunakannya
blktrace
untuk ini. Lihat Memvisualisasikan IO Linux dengan Seekwatcher dan blktrace .Saya akan melihat apakah saya dapat mengirim salah satu contoh saya segera.
Edit:
Anda tidak menyebutkan distribusi Linux, tetapi mungkin ini adalah kasus yang bagus untuk skrip dtrace di Linux atau bahkan System Tap , jika Anda menggunakan sistem seperti RHEL.
sumber
Satu-satunya alat yang saya tahu yang dapat memonitor aktivitas I / O berdasarkan file adalah
inotifywatch
. Itu bagian dariinotify-tools
paket. Sayangnya, itu hanya memberi Anda jumlah operasi.sumber
menggunakan iotop untuk mendapatkan PID proses yang berkontribusi IO tinggi
jalankan strace terhadap PID yang Anda buat, Anda akan melihat file mana yang sedang diakses oleh proses tertentu
sumber
Saya akhirnya menggunakan Sysdig untuk ini
sumber
csysdig
, tekan F2, dan pilihFiles
view. Anda akan melihat bagian atas file yang diakses oleh kolom OPS (dapat diubah dengan menekan F9).csysdig -v files
langsung menuju ke tampilan "Files"Saya berpendapat Anda mungkin telah mengajukan pertanyaan yang salah. jika Anda mencari bottleneck i / o, mungkin sama pentingnya untuk melihat apa yang terjadi pada disk Anda. db terkenal melakukan random i / o yang secara signifikan dapat mengurangi throughput, terutama jika Anda hanya memiliki beberapa spindle.
yang mungkin lebih menarik adalah melihat apakah Anda memiliki waktu tunggu yang lama pada disk itu sendiri. Anda dapat melakukan ini dengan collectl melalui perintah "collectl -sD", yang akan menampilkan statistik kinerja disk individual. Apakah - rumah untuk mengubahnya menjadi utilitas seperti teratas. Jika ada banyak disk yang terlibat, jalankan melalui colmux: colmux -command "-sD" dan itu akan memungkinkan Anda mengurutkan berdasarkan kolom pilihan Anda, bahkan di beberapa sistem.
sumber
Anda dapat memonitor i / o per blok perangkat (via / proc / diskstats) dan per proses (io akuntansi via
/proc/$PID/io
atau taskstats ), tapi saya tidak tahu cara melakukannya per-file.sumber
Mungkin baris tidak valid akan menyelesaikan memecahkan ini.
Inotify API menyediakan mekanisme untuk memantau acara-acara filesystem. Memberitahu dapat digunakan untuk memonitor file individu, atau untuk memantau direktori. Ketika direktori dimonitor, inotify akan mengembalikan peristiwa untuk direktori itu sendiri, dan untuk file di dalam direktori.
Monitor Aktivitas Sistem File dengan inotify
inotify Reference
sumber
lsof
)Meskipun ada banyak info bagus di jawaban di sini, saya ingin tahu apakah itu benar-benar berlaku?
Jika Anda berbicara tentang file dalam 10-an gigabyte, terus-menerus ditulis untuk, maka kecuali mereka adalah file log atau serupa yang terus-menerus ditambahkan ke (dalam hal ini hanya memantau ukuran file), kemungkinan besar file-file tersebut adalah mmap . Jika itu masalahnya, maka jawaban terbaik mungkin Anda harus berhenti melihat sebagian besar solusi. Hal pertama yang harus Anda tanyakan dari solusi lain yang diusulkan adalah "apakah itu bekerja dengan mmap", karena sebagian besar mereka tidak mau. Namun, Anda mungkin dapat mengubah masalah menjadi pemantauan perangkat blok daripada memantau file.
Ketika sebuah program meminta halaman dari file mmap'd, itu hanya merujuk lokasi dalam memori virtual. Halaman itu mungkin atau mungkin belum ada dalam memori. JIKA itu tidak, maka itu menghasilkan kesalahan halaman, yang memicu halaman dimuat dari disk, tetapi itu terjadi dalam sistem memori virtual, yang tidak mudah terikat pada proses aplikasi tertentu atau ke file tertentu. Demikian pula, ketika aplikasi Anda memperbarui halaman mmap'd, tergantung pada flags, yang mungkin tidak memicu penulisan langsung ke disk, dan dalam beberapa kasus mungkin tidak masuk ke disk sama sekali (meskipun mungkin yang terakhir bukan kasus yang Anda minati di).
Yang terbaik yang dapat saya pikirkan untuk file mmap'd, jika itu layak untuk Anda, adalah menempatkan setiap file yang menarik ke perangkat yang terpisah, dan menggunakan statistik perangkat untuk mengumpulkan informasi penggunaan Anda. Anda dapat menggunakan partisi lvm untuk ini. Bind mount tidak akan berfungsi karena tidak membuat perangkat blok baru.
Setelah Anda memiliki file di perangkat blok terpisah, Anda bisa mendapatkan statistik dari / sys / block / *, atau / proc / diskstats
Mungkin terlalu mengganggu untuk memperkenalkan ini ke server produksi, tetapi mungkin Anda bisa memanfaatkannya.
JIKA file tidak dalam format mm, maka ya, Anda dapat memilih salah satu solusi lain di sini.
sumber
Saya baru-baru ini mengutak-atik collectl , itu terlihat alat yang hebat, dan cukup teguh untuk menginstal. Yang paling menarik adalah Anda bisa mengetahui mana yang merupakan proses yang bertanggung jawab atas kemacetan IO. Saya sarankan Anda membaca Menggunakan Collectl , mungkin bermanfaat.
sumber
Saya akan merekomendasikan Anda untuk memeriksa http://dag.wieers.com/home-made/dstat/ . Alat hebat ini memungkinkan untuk memeriksa banyak statistik.
sumber
Saya pikir iotop adalah salah satu alat terbaik di Linux untuk mengidentifikasi kemacetan di IO.
sumber
iotop
tidak memonitor per file, ia bekerja per proses