Executamos um cluster Apache Cassandra em que cada host tem algumas centenas de milhares de arquivos abertos a qualquer momento.
Gostaríamos de poder obter uma contagem de arquivos abertos em intervalos periódicos e alimentar esse número com grafite , mas quando corremos para lsofbaixo collectd, isso leva alguns minutos para ser concluído e consumir uma quantidade excessiva de CPU enquanto isso. .
Gostaria de saber se existe um meio alternativo e mais amigável de obter os mesmos dados que o lsof fornece, ou mesmo uma maneira de executar o lsof que não consome a CPU tão visivelmente? (Embora eu assuma que esse último método provavelmente levaria muito mais tempo para ser concluído do que atualmente ... não é o ideal).
Talvez o kernel mantenha alguma variável em algum lugar que contenha o número de arquivos abertos? Desejo de pensar?
Atualizar:
Em resposta a uma das respostas, já estamos usando os sinalizadores -be -n. Aqui está o comando completo, como o tenho em execução 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 ': Esse arquivo ou diretório não existe - Q @ Benoît como posso evitar isso?