Значение 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" в таблице дескрипторов файла процесса.

Другие вопросы по тегам