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?