Мы запускаем кластер Apache Cassandra, где на каждом хосте в каждый момент времени открыто несколько сотен тысяч файлов.
Мы хотели бы иметь возможность получать количество открытых файлов с периодическими интервалами и подавать это число в графит , но когда мы работаем lsof
под collectd
ним, в итоге уходит несколько минут на завершение работы и в то же время жует чрезмерное количество ЦП ,
Мне интересно, есть ли альтернативные и более дружественные способы получения тех же данных, которые предоставляет lsof, или даже способ запуска lsof, который не будет так сильно загружаться в CPU? (Хотя я предполагаю, что этот последний метод, вероятно, займет гораздо больше времени, чем в настоящее время ... не идеально).
Возможно, ядро поддерживает некоторую переменную где-то, которая содержит количество открытых файлов? Желаемое за действительное?
Обновить:
В réponse на одном из ответов, мы уже используя -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, как мне этого избежать?