3

Я ищу способ узнать лимит открытого FD под машинами с Ubuntu, у которых нет ограничений /proc/PID/limits , а именно с компьютерами EC2.

Я искал /proc/PID/limits limit и нашел запись FDSize со значениями вроде:

FDSize: 256
FDSize: 512

В любом случае я могу вывести максимально допустимые дескрипторы открытых файлов из этого значения?

3 ответа3

2

Нет, это не показывает предел - только использование.

>>> 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
...

Значение не изменилось после изменения лимита, только после создания файлов. Это означает, что он измеряет фактическое использование, а не пределы.

1

Afaik, в Linux ограничение на количество открытых файлов для каждого процесса контролируется командой ulimit . От man ulimit:

NAME
    ulimit - set or report file size limit

DESCRIPTION
    The  ulimit utility shall set or report the file-size writing limit 
imposed on files written by the shell and its child processes (files 
of any size may be read). Only a process with appropriate privileges 
can increase the limit.

В моей системе:

$ 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 содержит больше информации.

Мне не совсем понятно, если это именно то, что вы искали. Отвечает ли это на ваш вопрос?

0

из man proc, "* FDSize: Количество слотов дескриптора файла, выделенных в данный момент.", это число "struct file" в таблице дескрипторов файла процесса.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .