【问题标题】:Errno 24 (too many open files) error on internal sd card android devicesErrno 24(打开的文件过多)内部 sd 卡 Android 设备上的错误
【发布时间】: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 版本中解决。

标签: android android-sdcard


【解决方案1】:

这确实解释了我在使用几个 Bittorrent 客户端时遇到的问题。文件下载并出现在外部 SD 卡上,但它们不可用,当我强制重新检查下载的数据时,它显示丢失或损坏的部分。

数周以来,我一直在责怪 Torrent 群(糟糕的同行?)、SD 卡本身(有缺陷?没坐好?)或 KitKat(与有点烦人的新限制无关)。

每个 torrent 打开似乎都与每个对等点关联一个文件句柄和一个网络套接字... 10 个 torrent 正在运行,每个 10 个对等点;没问题。但是打开了 10 个种子,如果 swarm 速度很快,其中一些可能会连接到 50 个对等点,而且我那可怜的小手机肯定撞到了文件手柄的天花板上。那是在我对 SD 卡做任何其他事情之前!

Android Torrent 客户端的用户自然会想要使用外部 SD 卡... - 大文件 - 单独的文件系统让我感觉更安全,使用 HTTP 服务器将数据传输到任何其他计算机 - 下载 Linux 发行版并能够将其直接插入 SD 卡插槽!

我设计的解决方法 - 到目前为止似乎有效 - 将活动的 Torrent 保留在主存储中,并在完成写入后将它们转移到 SD 卡。这样可以避免损坏 SD 卡上出现的数据。 Flud (Google Play) 不显眼、可靠,并且可以选择将已完成的 Torrent 移动到新位置。

【讨论】:

    猜你喜欢
    • 2011-12-03
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2019-04-11
    • 2016-04-21
    • 1970-01-01
    相关资源
    最近更新 更多