Prowadzimy klaster Apache Cassandra, w którym każdy host ma kilkaset tysięcy otwartych plików w danym momencie.
Chcielibyśmy, aby być w stanie uzyskać liczbę otwartych plików w regularnych odstępach czasu i nakarmić tę liczbę do grafitu , ale kiedy uruchomić lsof
pod collectd
, kończy się poświęcenie kilku minut na wypełnienie i żucie się dużej ilości CPU w międzyczasie .
Zastanawiam się, czy istnieje alternatywny i bardziej przyjazny sposób na uzyskanie tych samych danych, które zapewnia lsof, czy nawet sposób na uruchomienie lsof, które nie zjadają tak szybko procesora? (Chociaż zakładam, że ta ostatnia metoda prawdopodobnie zajmie znacznie więcej czasu niż obecnie ... nie jest idealna).
Być może jądro zachowuje gdzieś zmienną zawierającą liczbę otwartych plików? Pobożne życzenie?
Aktualizacja:
W odpowiedzi na jedną z odpowiedzi używamy już flag -b
i -n
. Oto pełne polecenie, ponieważ działam pod 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 ': Brak takiego pliku lub katalogu - Q @ Benoît, jak mogę tego uniknąć?