嗨,我可以打开多少个文件有限制吗? 我卡在 1021 个文件上。
这与MVE有关吗? 如果可能,请发布控制台输出和回溯。
程序收到信号 SIGABRT,已中止。
[切换到线程 0x7ff426a46700 (LWP 15483)]
__GI_raise (sig=sig@entry=6) 中的 0x00007ff42a1c7267
在../sysdeps/unix/sysv/linux/raise.c:55
55 ../sysdeps/unix/sysv/linux/raise.c:没有这样的文件或目录。
(gdb) BT
at ../sysdeps/unix/sysv/linux/raise.c:55
来自 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
来自 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
来自 /lib/x86_64-linux-gnu/libgcc_s.so.1
at /usr/include/c++/4.9/bits/basic_string.h:240
at /usr/include/c++/4.9/bits/basic_string.h:547
proxy=proxy@entry=0x1cd4af0, init_only=init_only@entry=false)
at view.cc:790
proxy=proxy@entry=0x1cd4af0, update=update@entry=false) at view.cc:739
this@entry=0x3fc, name="original", type=type@entry=mve::IMAGE_TYPE_UINT8)
- -类型
在 view.cc:405
at ../../libs/mve/view.h:436
at pthread_create.c:333
at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
您正在使用最新版本的 MVE 吗? 问题能否持续重现? 这是一个特别大的数据集吗? 您从哪里得到Too many files open
错误消息,我在控制台输出中看不到它。
我在两台不同的计算机上多次复制了它,并且总是使用最新版本的 MVE。 该错误发生在特征检测期间,并且始终在文件 1021 处。数据集很大,大约有 16000 张图片。
查看 ID 1013 (1920x1080),1860 个特征,耗时 3268 毫秒。
检测特征,查看 1021 of 16295 (6.2%)...在抛出 'util::Exception' 实例后调用终止
what():打开文件时出错:打开的文件太多
中止(核心转储)
几个 shell 限制了允许进程打开的文件描述符的数量。 在 bash 中,您可以使用ulimit -n
来检查和设置此限制。 它默认为 1024,我假设在您的情况下它已被最大化(stdin、stdout、stderr、prebundle 和 1020 个其他视图)。
然而问题是为什么有这么多视图同时打开?
打开的文件仍然太多。 ulimit 当然“解决”了它。
我们再看看。
嗨 Jus80687,
我们试图通过应用补丁来重现该错误,但没有成功。 你确定你已经编译了最新版本的代码吗?
另外,在应用补丁后,错误发生了多少个文件? 你能在它发生时发布回溯吗?
您能否将数据集的 view_xxxx.mve 目录之一的内容发送给我们?
提前致谢。
嗨安德烈,
是的,我编译了最新版本的 MVE。 补丁之后,错误不再发生在完全相同的视图中,但仍然在 1024 左右。当然,使用 ulimit 的解决方法仍然有效。
我认为这与特定视图无关,因为我更改了几次图片数量。 图片本身是从电影中提取的,没有 EXIF 信息。
控制台输出没有改变,但我必须再次检查回溯。
谢谢你的帮助
此时我们需要额外的数据来重现问题。 你能把你的观点发给我们一个邮编吗? 谢谢。
还有更多其他信息吗? 否则问题将被关闭。
最有用的评论
几个 shell 限制了允许进程打开的文件描述符的数量。 在 bash 中,您可以使用
ulimit -n
来检查和设置此限制。 它默认为 1024,我假设在您的情况下它已被最大化(stdin、stdout、stderr、prebundle 和 1020 个其他视图)。然而问题是为什么有这么多视图同时打开?
bash ulimit 手册页