Apache Cassandraクラスターを実行し、各ホストで常に数十万のファイルを開いています。
定期的に開いているファイルの数を取得し、この数をグラファイトに入力できるようにしたいと考えていますが、実行lsof
するとcollectd
、完了するまでに数分かかり、その間に異常な量のCPUを噛みます。
lsofが提供するのと同じデータを取得するための代替のより友好的な方法があるのか、それともlsofを実行してCPUに著しく食い込まない方法があるのか疑問に思っています。(この後者の方法は、現在よりもはるかに時間がかかると思われますが、理想的ではありません)。
おそらくカーネルは、開いているファイルの数を含む変数をどこかに保持していますか?希望的観測?
更新:
回答の1つに応じて、すでに-b
and -n
フラグを使用しています。以下に実行中の完全なコマンドを示しますcollectd
。
sudo lsof -b -n -w | stdbuf -i0 -o0 -e0 wc -l
/proc/{{number}}/fd/5': No such file or directory find:
-find :/ proc / {{number}} / fdinfo / 5 ':そのようなファイルまたはディレクトリはありません-Q @Benoîtどうすればそれを回避できますか?