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 lsof
baixo 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 -b
e -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?