Kami menjalankan gugus Apache Cassandra di mana setiap host memiliki beberapa ratus ribu file yang dibuka pada waktu tertentu.
Kami ingin dapat memperoleh jumlah file yang terbuka secara berkala dan memasukkan angka ini ke dalam grafit , tetapi ketika kami berjalan di lsof
bawah collectd
, itu berakhir membutuhkan waktu beberapa menit untuk menyelesaikan dan mengunyah jumlah CPU yang tidak terkendali sementara itu .
Saya bertanya-tanya apakah ada cara alternatif dan lebih ramah untuk mendapatkan data yang sama yang disediakan oleh lsof, atau bahkan cara menjalankan lsof yang tidak akan memakan CPU secara mencolok? (Meskipun saya berasumsi metode terakhir ini mungkin akan membutuhkan waktu lebih lama untuk menyelesaikan daripada yang saat ini ... tidak ideal).
Mungkin kernel mempertahankan beberapa variabel di suatu tempat yang berisi jumlah file yang terbuka? Angan-angan?
Memperbarui:
Sebagai tanggapan terhadap salah satu jawaban, kami sudah menggunakan -b
dan -n
flag. Inilah perintah lengkapnya karena saya menjalankannya di bawah collectd
:
sudo lsof -b -n -w | stdbuf -i0 -o0 -e0 wc -l
/proc/{{number}}/fd/5': No such file or directory find:
/ proc / {{number}} / fdinfo / 5 ': Tidak ada file atau direktori seperti itu - Q @ Benoît bagaimana saya bisa menghindarinya?echo /proc/*/fd/* | wc -w
Kamu melakukannya dengan salah.
Dari
man proc
Nilai pertama jika Anda kucing yang memberi Anda apa yang Anda inginkan akan muncul.
Sebagai catatan saya tidak bisa mendapatkan
lsof
output untuk mencocokkan bahkan dengan sejumlah fudging tapi saya kumpulkan kalau itu yang dikatakan kernel lebih otoritatif daripada daftar yang Anda dapatkanlsof
.sumber
[root@ec2- cassandra101 ~]$ time lsof -b -n -w -l -L | stdbuf -i0 -o0 -e0 wc -l 1018065
. Berikut adalah apa yang berkas-nr mengatakan:[root@ec2- cassandra101 ~]$ cat /proc/sys/fs/file-nr 2784 0 3093428
. Perbedaan besar (1.000.000+ versus 2784) disebabkan oleh fakta yanglsof
mencakup semua hal yang tidak memiliki deskriptor file yang terkait dengannya: file perpustakaan, file yang dapat dieksekusi, dll. Jadi, jika Anda hanya tertarik pada deskriptor file, makafile-nr
adalah cara untuk pergi, jika tidak, Anda perlu lsof atau setara.inode-nr
alih-alih di lokasi yang sama.