Назад | Перейти на главную страницу

У процесса больше открытых сокетов, чем должно быть разрешено prlimit

Запуск debian jessie. Следующие действия выполняются от имени пользователя root, чтобы избежать проблем с разрешениями. Сначала я нахожу pid своей программы, затем проверяю лимит открытых файлов, чтобы убедиться, что он установлен на 1024. Но когда я подсчитываю количество открытых файлов, я нахожу 1851.

$ pgrep -x process_name
673
$ prlimit --pid 673 --nofile
RESOURCE DESCRIPTION              SOFT HARD UNITS
NOFILE   max number of open files 1024 4096 
$ lsof -n -p 673 | grep -c "IPv4"
1851

Для удобства я проверяю, что у процесса нет подпроцессов, которым он мог бы делегировать открытие файлов:

$ pgrep -P 673
# no output

Что здесь не так?

Потому что в том, как вы используете lsof, вы считаете все, а не только файловые дескрипторы, используйте что-то вроде этого:

lsof -n  -p <pid_number> | awk '$5 ~ /([0-9].+)/'

Но более простой способ:

ls -l /proc/673/fd | wc -l