Увеличение количества файловых дескрипторов в Linux

StackOverflow https://stackoverflow.com/questions/1189157

  •  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 или отладчик, чтобы найти файлы, открытые вашим процессом.Увеличение лимита просто отложит момент, когда у вас закончатся дескрипторы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top