Значение FDSize в / proc / PID / status

5408
Adam Matan

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

Я изучал /proc/PID/limitsи нашел запись FDSizeсо значениями, такими как:

FDSize: 256 FDSize: 512 

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

3

3 ответа на вопрос

2
Adam Matan

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

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

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

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

0
c4f4t0r

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

Похожие вопросы