Для выделенного балансировщика нагрузки я бы отслеживал общее количество файлов, открытых в системе, вместо того, чтобы тратить ресурсы ввода-вывода и ЦП на их подсчет по процессам. Оставшиеся открытые файлы нежелательными -процессами должны быть бессмысленным значением для предполагаемого результата.
Чтобы узнать глобальные открытые файлы системой Linux, нет необходимости их подсчитывать; ядро Linux отслеживает, сколько файлов у него открыто.
Чтобы это узнать, либо беги:
cat /proc/sys/fs/file-nr | awk ' { print $1 } '
или
sysctl fs.file-nr | awk ' { print $1 } '
Это намного эффективнее, чем подсчет всех файлов, открытых с выходом lsof
, который будет перемещаться по всем каталогам /proc/$PID/fd
и негативно повлияет на ресурсы ввода-вывода / ЦП вашей системы.
touch file
test_max=45
for ((j=2,i=3;i<test_max;i++,j++)) ; do ln -s $j $i; done
for ((i=1;i<test_max;i++)) ; do if ! [ -f "$i" ]; then echo "$i"; break; fi ; done
41