我有一个长时间运行的进程,它监视系统并打印周期性日志。如果我让它运行超过10-15分钟,它将退出并显示一条消息: 打开的文件过多。在Linux中增加文件描述符的数量
该程序使用实时timer_create()和timer_settime()每2秒引发一次SIGUSR1来设置。在处理程序中,在子节点中有一个fork() - exec()在/ proc/acpi/battery/state和/ sys/devices/system/cpu/cpu0上有父母和后续mmap()和流操作的等待/ cpufreq/scaling_cur_freq和scaling_setspeed文件。 我已经注意在周期性信号处理程序和所有其他地方关闭流FILE *指针。我也确保了所有映射文件的munmap()。
我该如何解决这个问题? 我应该增加允许的最大文件描述符,还是应该增加ulimit -aS显示的最大打开文件? 为什么如果我使用fclose()关闭所有FILE *,会发生这种情况?
这里有值我的系统,截至目前:
#cat /proc/sys/fs/file-max
152808
#ulimit -aS
.
.
.
.
open files (-n) 1024
2009-07-27
Dhruv
+1
你肯定在某个地方泄漏。 –
2009-07-27 16:33:59
+0
就像我在下面提到的,我没有正确关闭其中一个文件的流指针。我在fclose()被调用之前返回,如下所示: if(freq ==“1000000”) return 0; (频率==“1333000”) 返回1; else if(freq ==“1667000”) return 2; fclose(fp); 我把fclose放在if-else语句之前,它已经修复了。 –
2009-07-27 18:17:05