Menganalisis kinerja server Linux NFS


22

Saya ingin melakukan beberapa analisis server NFS kami untuk membantu melacak kemacetan potensial dalam aplikasi kami. Server menjalankan SUSE Enterprise Linux 10.

Hal-hal yang ingin saya ketahui adalah:

  • File mana yang sedang diakses oleh klien mana
  • Baca / tulis throughput pada basis per-klien
  • Overhead dikenakan oleh panggilan RPC lainnya
  • Waktu yang dihabiskan untuk menunggu permintaan NFS lain, atau disk I / O, untuk melayani klien

Saya sudah tahu tentang statistik yang tersedia /proc/net/rpc/nfsddan bahkan saya menulis posting blog yang menjelaskan secara mendalam. Apa yang saya cari adalah cara untuk menggali lebih dalam dan membantu memahami faktor-faktor apa yang berkontribusi terhadap kinerja yang dilihat oleh klien tertentu. Saya ingin menganalisis peran yang dimainkan server NFS dalam kinerja aplikasi di kluster kami sehingga saya bisa memikirkan cara terbaik untuk mengoptimalkannya.


Sepertinya ini semacam hal yang ditulis oleh system tap. Dokumennya sedikit omong kosong, tapi saya kira Anda bisa menyiapkan sesuatu untuk melakukan analisis semacam ini dengan menggunakannya. sourceware.org/systemtap/examples/keyword-index.html
Cian

Jawaban:


2

Hanya sebuah ide, cobalah mengendus lalu lintas dengan wireshark. Mungkin memberi tahu Anda pengguna mana yang mengakses file apa:

tshark -R nfs -i eth0

2

Saya harus mengatakan semua utilitas stat * berbeda tersedia untuk satu, nfsstat sejauh ini adalah yang terburuk! Ini memberi Anda kemampuan untuk melihat sekelompok counter tapi itu saja. Jika Anda melihatnya dua kali, ANDA harus melakukan pekerjaan untuk mencari tahu dengan seberapa banyak masing-masing penghitung berubah dan jika Anda ingin mengetahui tingkat perubahan Anda perlu membagi dengan jumlah detik di antara sampel. Dalam semua keadilan, nfsstat memang sudah ada sejak bertahun-tahun ketika keadaan masih sangat kasar dan sekarang terhambat oleh tidak ada orang yang ingin mengubah format output karena mungkin akan merusak banyak hal.

Sedangkan untuk menggunakan collectl untuk memonitor nfs, ia memberikan output nfsstat dalam format yang jauh lebih mudah dibaca, tetapi apa yang lebih baik Anda dapat menjalankannya selama berjam-jam atau berhari-hari dan memutar data yang telah Anda kumpulkan di latar belakang. Adapun permintaan untuk melihat proses apa yang sedang dilakukan, collectl juga dapat mengumpulkan data proses termasuk berapa banyak I / O yang dilakukan setiap proses dan bahkan memutarnya untuk menunjukkan kepada pengguna I / O teratas. Anda juga dapat menggunakan fitur teratas secara real time.

Jika Anda ingin menonton sendiri tema disk, collectl dapat melakukannya juga dan menampilkan semuanya dalam tampilan yang terkoordinasi.

Lihat ... -tanda


2

collectl (terutama subsistem NFS -nya ) adalah utilitas yang sangat bagus yang mungkin berguna untuk analisis Anda tetapi tidak cocok dengan daftar persyaratan Anda. Saya tidak mengetahui adanya utilitas Linux yang melakukannya.

(Tolong beritahu saya menambahkan catatan off-topik ini: Ada adalah perangkat lunak yang sesuai kebutuhan Anda: Sun berbasis DTrace Analytics (pdf) . - tapi sayangnya tidak tersedia pada Linux Anda akan menemukan banyak contoh besar di blog Brendan Gregg yang menggambarkan kemampuan alat ini.)



1

Menurut pendapat saya ini justru menyoroti masalah dengan alat saat ini. Di sini kita disebutkan setidaknya 3 termasuk nfsstat, iostat dan iotop. Kemudian ada wireshare dan nfsreplay. Apakah ini benar-benar terdengar seperti cara normal untuk melakukan sesuatu? Selain wireshark dengan kategori sendiri, bukankah Anda lebih suka 1 alat?

Untuk pembuka, sementara saya menemukan output iostat sangat berguna, terlalu sulit untuk membaca dengan semua angka 0,00. Collectl melaporkan data yang persis sama tetapi diformat lebih mudah di mata. Anda sudah tahu apa yang saya pikirkan tentang nfsstat dan karena collectl dapat memutar data apa pun, tidak perlu utilitas 'replay'. Adapun 'iotop', kumpulkan juga dapat menunjukkan proses yang diurutkan berdasarkan apa pun termasuk I / O.

Jadi begitulah semuanya, lengkap dengan cap waktu. Jika Anda memerlukan interval pemantauan yang lebih baik, Anda dapat memutar kembali sampel menjadi 0,1 atau 0,5 detik atau apa pun di antaranya, meskipun Anda akan menghasilkan lebih banyak overhead jika Anda memantau proses ini dengan cepat, tetapi akan dengan utilitas pemantauan proses apa pun.

DAN bonus terakhir adalah segala sesuatu yang Anda kumpulkan dengan collectl yang dapat Anda muat ke dalam spreadsheet dan mudah plot ATAU menggunakan colplot yang merupakan bagian dari collectl-utils.

-menandai


1

Anda mungkin ingin mencoba nfswatchdari http://nfswatch.sourceforge.net

Anda dapat melihat beberapa contoh keluaran di http://prefetch.net/blog/index.php/2009/06/16/monitoring-nfs-operations-with-nfswatch/

nfswatchadalah jenis suka top(meskipun saya tidak yakin apakah ada mode batch). Setelah berjalan, Anda dapat mengubah mengubah tampilan dengan menekan tombol (mis. "C" untuk menampilkan klien NFS menggunakan server NFS Anda).

Namun, dalam pengujian singkat saya, nfswatchsepertinya tidak bekerja dengan NFSv4.


1
Saran yang menarik. Sebenarnya, penulis sendiri mengatakan NFSv4 tidak didukung dan alat ini belum diperbarui selama sekitar 3 tahun. Sayang sekali karena akan sangat bermanfaat!
Tonin

1

Saya tidak memiliki jawaban yang lebih baik saat ini, namun Anda dapat mengikuti disk IO dengan tepat

iostat -mx <delay in sec.> <devices>

Ini memberikan angka yang sangat berguna, terutama ukuran antrian rata-rata dan waktu tunggu (dalam ms) untuk IO Anda. Ini menunjukkan cukup mudah jika disk Anda macet, dan jika hambatannya adalah IO count atau throughput.

Lalu dengan

netstat -plaute | grep nfs

Anda akan melihat koneksi klien dan byte yang ditransfer dari setiap klien secara real time. loop di atasnya untuk data kontinu. Akan sangat mudah untuk membuat skrip yang menyediakan data kontinu ... Saya sedang mengusahakannya :)

Sekarang untuk mendapatkan IO per proses, Anda dapat menggunakan iotop yang sangat baik . Anda masih harus menemukan cara untuk mencocokkan proses nfsd dengan klien.

Mengenai file mana yang sedang diakses oleh klien mana, saya macet. Sebenarnya file yang saat ini dibaca / ditulis dari klien NFS bahkan tidak muncul dalam output lsof.

Hanya untuk memperluas di netstat, gunakan watch -d untuk melihat bagaimana segala sesuatu berubah & urutkan berdasarkan host

watch -d "netstat -plaute | grep nfs | sort -k 4,5"

Ini adalah solusi terbaik yang saya temukan sejauh ini untuk mengetahui host mana yang menyebabkan lalu lintas di NFS. Lalu saya bisa pergi ke klien untuk mencari tahu file mana yang diaksesnya. Terima kasih!
peschü

0

Anda mungkin ingin memeriksa nfsreplay. Mungkin membantu Anda mengetahui apa yang terjadi. Anda juga dapat menemukan informasi dan tautan di sini berguna

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.