Ми запускаємо кластер Apache Cassandra, де кожен хост має відкритий кілька сотень тисяч файлів у будь-який момент.
Ми хотіли б, щоб мати можливість отримати кількість відкритих файлів через певні проміжки часу і годувати це число в графіт , але коли ми біжимо lsof
під collectd
, він закінчує приймати кілька хвилин , щоб закінчити і жувальний непомірну кількість CPU в той же час .
Мені цікаво, чи існує альтернативний і більш дружній спосіб отримати ті самі дані, які надає lsof, або навіть спосіб запуску lsof, який не буде їсти в процесор так помітно? (Хоча я припускаю, що цей останній метод, ймовірно, потребуватиме набагато більше часу, ніж це є зараз ... не ідеально).
Можливо, ядро десь підтримує якусь змінну, яка містить кількість відкритих файлів? Прийняття бажаного за дійсне?
Оновлення:
Відповідаючи на одну з відповідей, ми вже використовуємо прапори -b
та -n
. Ось повна команда, як у мене вона працює під 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 ': Немає такого файлу чи каталогу - Q @ Benoît Як я можу цього уникнути?