Увеличение количества файловых дескрипторов в Linux
-
19-09-2019 - |
Вопрос
У меня есть длительный процесс, который контролирует систему и периодически печатает журналы.Если я позволю ему работать дольше 10-15 минут, он завершится с сообщением:Слишком много открытых файлов.
Программа настраивается с использованием timer_create() и timer_settime() в реальном времени, которые вызывают SIGUSR1 каждые 2 секунды.В обработчике есть один fork()-exec() в дочернем элементе. Ожидание в родительских и последующих операциях mmap() и потоковых операциях в /proc/acpi/battery/state и /sys/devices/system/cpu/cpu0 Файлы /cpufreq/scaling_cur_freq и scaling_setspeed.Я позаботился о том, чтобы закрыть указатели потока FILE * в обработчике периодических сигналов и во всех других местах.Я также обеспечил munmap() для всех сопоставленных файлов.
Как я могу обойти это?Должен ли я увеличить максимальное количество разрешенных файловых дескрипторов или мне следует увеличить максимальное количество открытых файлов, отображаемых с помощью ulimit -aS?Почему это происходит, если я закрываю весь ФАЙЛ * с помощью fclose()?
Вот значения для моей системы на данный момент:
#cat /proc/sys/fs/file-max
152808
#ulimit -aS
.
.
.
.
open files (-n) 1024
Решение
Используйте lsof или отладчик, чтобы найти файлы, открытые вашим процессом.Увеличение лимита просто отложит момент, когда у вас закончатся дескрипторы.