Проверьте открыть предел FD на данный процесс в Linux

Горстка производителей дисков осуществляет regioning на аппаратном уровне, который был проблемой, которую я имел на своем MacBook. Если вышеупомянутые ответы не работают, можно исследовать диск видеть, является ли это ситуацией.

60
задан Adam Matan 5 September 2009 в 12:38
поделиться

4 ответа

Подсчитайте записи в / proc / / fd / . Жесткие и мягкие ограничения, применяемые к процессу, можно найти в / proc / /limits[119805 provided.

115
ответ дан 24 November 2019 в 17:34
поделиться

Вы можете попробовать написать сценарий, который периодически вызывает lsof -p {PID} для данного pid.

2
ответ дан 24 November 2019 в 17:34
поделиться

Единственными интерфейсами, предоставляемыми ядром Linux для получения ограничений на ресурсы, являются getrlimit () и / proc / pid / limits ]. getrlimit () может получить только ограничения ресурсов вызывающего процесса. / proc / pid / limits позволяет получить ограничения ресурсов любого процесса с тем же идентификатором пользователя и доступен в RHEL 5.2, RHEL 4.7, Ubuntu 9.04 и в любом дистрибутиве. с ядром 2.6.24 или новее.

Если вам нужно поддерживать старые системы Linux, вам нужно будет заставить сам процесс вызывать getrlimit () . Конечно, самый простой способ сделать это - изменить программу или библиотеку, которую она использует. Если вы запускаете программу, вы можете использовать LD_PRELOAD для загрузки вашего собственного кода в программу. Если ни один из них невозможен, вы можете подключиться к процессу с помощью gdb и заставить его выполнить вызов внутри процесса. Вы также можете сделать то же самое самостоятельно, используя ptrace () , чтобы присоединиться к процессу, вставить вызов в его память и т. Д., Однако это очень сложно сделать правильно и не рекомендуется.

С соответствующими привилегиями другие способы сделать это будут включать просмотр памяти ядра, загрузку модуля ядра или иное изменение ядра, но я предполагаю, что это исключено.

34
ответ дан 24 November 2019 в 17:34
поделиться

Вы запросили методы bash / python. ulimit был бы лучшим подходом для bash (если не брать в расчет / proc / $ pid / fd и т.п. вручную). Для python вы можете использовать модуль ресурсов.

import resource

print(resource.getrlimit(resource.RLIMIT_NOFILE))
 $ python test.py

(1024, 65536)

resource.getrlimit соответствует вызову getrlimit в программе на языке C. Результаты представляют текущее и максимальное значения для запрошенного ресурса. В приведенном выше примере текущее (мягкое) ограничение составляет 1024. Эти значения являются типичными значениями по умолчанию для современных систем Linux.

2
ответ дан 24 November 2019 в 17:34
поделиться
Другие вопросы по тегам:

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