Значение FDSize в /proc/PID/status
Я ищу способ узнать лимит открытого FD под машинами Ubuntu, который не имеет /proc/PID/limits
а именно машины EC2.
Я смотрел в /proc/PID/limits
и нашел запись FDSize
со значениями вроде:
FDSize: 256
FDSize: 512
В любом случае я могу вывести максимально допустимые дескрипторы открытых файлов из этого значения?
3 ответа
Нет, это не показывает предел - только использование.
>>> import resource
>>> resource.setrlimit(resource.RLIMIT_NOFILE, (10000, 10000))
>>> resource.getrlimit(resource.RLIMIT_NOFILE)
(10000, 10000)
Сейчас:
>>> for i in range(5000):
... f=open('/tmp/delme'+str(i),'w')
... fs.append(f)
А также:
laptop:/proc/20160$ cat status
...
FDSize: 8192
...
Значение не изменилось после изменения предела, сразу после создания файлов. Это означает, что он измеряет фактическое использование, а не пределы.
Afaik, в Linux ограничение на количество открытых файлов для каждого процесса контролируется через ulimit
команда. От man ulimit
:
НАЗВАНИЕ ulimit - установить или ограничить размер файла отчета ОПИСАНИЕ Утилита ulimit устанавливает или сообщает лимит на размер файла накладывается на файлы, написанные оболочкой и ее дочерними процессами (файлы любого размера можно прочитать). Только процесс с соответствующими привилегиями может увеличить лимит.
В моей системе:
$ ulimit -aS | grep "open files"
open files (-n) 1024
$ ulimit -aH | grep "open files"
open files (-n) 1024
Общесистемный лимит хранится в /proc/sys/fs/file-max
$ cat /proc/sys/fs/file-max
305018
Раздел Linux Benchmarking по настройке ограничений файловых дескрипторов в Linux содержит больше информации.
Мне не совсем понятно, если это именно то, что вы искали. Отвечает ли это на ваш вопрос?
Из man proc, "* FDSize: Количество слотов дескриптора файла, выделенных в данный момент.", это число "struct file" в таблице дескрипторов файла процесса.