[英]“too many open files” error after deleting many files
我的程序每10秒钟在指定目录中创建一个日志文件。 然后在另一个线程中,迭代该目录中的文件。 如果文件中包含内容,则将其压缩并上传到外部存储中;如果文件为空,则将其删除。 程序运行一段时间后,出现错误"too many open files" (gzopen failed, errno = 24)
。
当我查看/proc/<pid>/fd
我看到在创建日志的同一目录中有许多断开的文件链接,链接旁有单词(deleted)
。
知道我在做什么错吗? 我检查了两个线程的close
函数(在写入日志的线程中)和boost::filesystem::remove
(压缩并上传非空日志文件并删除空日志文件的线程)的返回值)。 所有返回值均为零,而(deleted)
链接的列表则每10秒购买1个更长的时间。
我认为这个问题从来没有发生在32位上,但是最近我移到了64位,现在我感到惊讶。
您忽略了关闭打开的文件。
根据您的描述,听起来好像您close
了要打开的文件以登录到日志线程,但是您继续说,在压缩和/或上传后,您只是boost::filesystem::remove
文件。
请记住:
gzopen
打开的任何压缩文件都必须是gzclose
d /proc/pid/fd
输出将有助于缩小范围,但是不幸的是您没有发布它。 看起来无益的输出如何给出细微提示的示例:
# You forgot to gzclose the output file after compressing it
l-wx------ user group 64 Apr 9 10:17 43 -> /tmp/file.gz (deleted)
# You forgot to close the input file after compressing it
lr-x------ user group 64 Apr 9 10:17 43 -> /tmp/file (deleted)
# You forgot to close the input file after logging
l-wx------ user group 64 Apr 9 10:17 43 -> /tmp/file (deleted)
# You forgot to close the input file after transferring it
lr-x------ user group 64 Apr 9 10:17 43 -> /tmp/file.gz (deleted)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.