【发布时间】:2012-10-31 10:44:43
【问题描述】:
我目前正在开发一个很酷的 Android 应用程序,它可以分析和交叉多个图像文件。不幸的是,我无法透露更多有关它的信息。
无论如何,我已经在多台设备上对其进行了测试,并且在某些随机情况下达到了打开文件过多的情况(Errno 24)。这发生在具有内部 SD 卡的设备(如三星 Galaxy S3)上。生根设备后,我已经能够确定由于 sdcard 作为单独的文件系统(称为 FUSE 的伪文件系统)而导致的问题,其中我的应用程序打开的文件实际上是由系统进程 /system/bin 打开的/sdcard/.
这将设备上的所有进程限制为仅 1024 个文件描述符(文件驻留在 SD 卡上)。 1024 个文件描述符限制是 Android 每个进程的最大打开文件数。
以安装了 100 个应用程序的设备为例,每次打开 10 个文件(数据库文件、属性等),几乎达到了限制。一旦超过 1024 个文件的限制,整个设备就毫无用处 - 应用程序停止工作等等。
★★ 如果你和我一样觉得这很麻烦,请给这个公开的问题投票 ★★ http://code.google.com/p/android/issues/detail?id=39002
【问题讨论】:
-
感谢您的帖子!我相信我在三星 Galaxy Nexus 上遇到了同样的问题。就我而言,只涉及一个应用程序,但它会循环浏览许多照片,并最终在可怕的消息“无法创建 epoll 实例。errno = 24”之后死掉。据我所知,我正在清理打开的文件等,但无法解决它。您能否提供有关原因和可能解决方案的更多见解?谢谢。
-
对 Android 工程师 Dan Morrill 就内部 SD 卡设备中 fuse 文件系统的使用进行了精彩的采访。检查一下:androidpolice.com/2011/11/18/… 不幸的是我找不到解决这个问题的方法。我希望我打开的问题能在未来的 Android 版本中解决。