Ми запускаємо кластер 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 Як я можу цього уникнути?