微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Firebase DB:应用程序打开了太多文件一个进程中的最大可用文件描述符默认为 1024

如何解决Firebase DB:应用程序打开了太多文件一个进程中的最大可用文件描述符默认为 1024

我在 Firebase 中收到以下错误。我的代码不直接打开任何文件,但它广泛适用于 HttpOK、WebRTC 和整体网络。网络也使用文件描述符吗?由于错误不是由我的代码引发的,我很好奇如何修复它。我能以某种方式查看打开的文件描述符的位置和位置吗? (然后我可以找到导致描述符泄漏的原因)。

2021-06-13 04:14:59.610 30892-30994/com.mafialab.mafia E/sqliteDatabase:打开数据库失败 '/data/user/0/com.mafialab.mafia/databases/google_app_measurement_local.db'。 android.database.sqlite.sqliteCantOpenDatabaseException:未知错误代码2062):无法打开数据库 ############################################### ############### 错误代码:2062 (sqlITE_CANTOPEN_EMFILE) 原因:应用程序打开了太多文件一个进程中的最大可用文件描述符认为 1024。 (未知错误代码 2062):无法打开数据库) ############################################### ############### 在 android.database.sqlite.sqliteConnection.nativeOpen(本机方法) 在 android.database.sqlite.sqliteConnection.open(sqliteConnection.java:262) 在 android.database.sqlite.sqliteConnection.open(sqliteConnection.java:205) 在 android.database.sqlite.sqliteConnectionPool.openConnectionLocked(sqliteConnectionPool.java:649) 在 android.database.sqlite.sqliteConnectionPool.open(sqliteConnectionPool.java:255) 在 android.database.sqlite.sqliteConnectionPool.open(sqliteConnectionPool.java:222) 在 android.database.sqlite.sqliteDatabase.openInner(sqliteDatabase.java:1191) 在 android.database.sqlite.sqliteDatabase.open(sqliteDatabase.java:1146) 在 android.database.sqlite.sqliteDatabase.openDatabase(sqliteDatabase.java:861) 在 android.app.ContextImpl.openorCreateDatabase(ContextImpl.java:729) 在 android.content.Contextwrapper.openorCreateDatabase(Contextwrapper.java:310) 在 android.database.sqlite.sqliteOpenHelper.getDatabaseLocked(sqliteOpenHelper.java:254) 在 android.database.sqlite.sqliteOpenHelper.getWritableDatabase(sqliteOpenHelper.java:194) 在 com.google.android.gms.measurement.internal.zzef.getWritableDatabase(com.google.android.gms:play-services-measurement-impl@@19.0.0:1) 在 com.google.android.gms.measurement.internal.zzeg.zzo(com.google.android.gms:play-services-measurement-impl@@19.0.0:1) 在 com.google.android.gms.measurement.internal.zzeg.zzq(com.google.android.gms:play-services-measurement-impl@@19.0.0:6) 在 com.google.android.gms.measurement.internal.zzeg.zzi(com.google.android.gms:play-services-measurement-impl@@19.0.0:9) 在 com.google.android.gms.measurement.internal.zzjk.zzl(com.google.android.gms:play-services-measurement-impl@@19.0.0:6) 在 com.google.android.gms.measurement.internal.zzhw.zzu(com.google.android.gms:play-services-measurement-impl@@19.0.0:147) 在 com.google.android.gms.measurement.internal.zzhc.run(com.google.android.gms:play-services-measurement-impl@@19.0.0:1) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 com.google.android.gms.measurement.internal.zzfq.run(com.google.android.gms:play-services-measurement-impl@@19.0.0:6) 2021-06-13 04:14:59.619 30892-30994/com.mafialab.mafia E/FA:开幕 本地数据库失败,删除并重新创建它 2021-06-13 04:14:59.622 30892-30994/com.mafialab.mafia W/sqliteLog: (28) 失败 打开 “/data/user/0/com.mafialab.mafia/databases/google_app_measurement_local.db” 带有标志 (131138) 和 mode_t (0) 由于错误 (24) 2021-06-13 04:14:59.622 30892-30994/com.mafialab.mafia W/sqliteLog: (28) 失败 打开 “/data/user/0/com.mafialab.mafia/databases/google_app_measurement_local.db” 带有标志 (131072) 和 mode_t (0) 由于错误 (24) 2021-06-13 04:14:59.622 30892-30994/com.mafialab.mafia E/sqliteLog: (14) 不能 在 [4bb21d8205] 2021-06-13 04:14:59.622 的第 36170 行打开文件 30892-30994/com.mafialab.mafia E/sqliteLog: (14) os_unix.c:36170: (24) 打开(/data/user/0/com.mafialab.mafia/databases/google_app_measurement_local.db)

  • 2021-06-13 04:14:59.622 30892-30994/com.mafialab.mafia E/sqliteLog:(1) 进程:Pid (30892) Uid (10190) Euid (10190) Gid (10190) (10190) 2021-06-13 04:14:59.624 30892-30994/com.mafialab.mafia E/sqliteDatabase:打开数据库失败 '/data/user/0/com.mafialab.mafia/databases/google_app_measurement_local.db'。 android.database.sqlite.sqliteCantOpenDatabaseException:未知错误代码2062):无法打开数据库 ############################################### ############### 错误代码:2062 (sqlITE_CANTOPEN_EMFILE) 原因:应用程序打开了太多文件一个进程中的最大可用文件描述符认为 1024。 (未知错误代码 2062):无法打开数据库) ############################################### ############### 在 android.database.sqlite.sqliteConnection.nativeOpen(本机方法) 在 android.database.sqlite.sqliteConnection.open(sqliteConnection.java:262) 在 android.database.sqlite.sqliteConnection.open(sqliteConnection.java:205) 在 android.database.sqlite.sqliteConnectionPool.openConnectionLocked(sqliteConnectionPool.java:649) 在 android.database.sqlite.sqliteConnectionPool.open(sqliteConnectionPool.java:255) 在 android.database.sqlite.sqliteConnectionPool.open(sqliteConnectionPool.java:222) 在 android.database.sqlite.sqliteDatabase.openInner(sqliteDatabase.java:1191) 在 android.database.sqlite.sqliteDatabase.open(sqliteDatabase.java:1146) 在 android.database.sqlite.sqliteDatabase.openDatabase(sqliteDatabase.java:861) 在 android.app.ContextImpl.openorCreateDatabase(ContextImpl.java:729) 在 android.content.Contextwrapper.openorCreateDatabase(Contextwrapper.java:310) 在 android.database.sqlite.sqliteOpenHelper.getDatabaseLocked(sqliteOpenHelper.java:254) 在 android.database.sqlite.sqliteOpenHelper.getWritableDatabase(sqliteOpenHelper.java:194) 在 com.google.android.gms.measurement.internal.zzef.getWritableDatabase(com.google.android.gms:play-services-measurement-impl@@19.0.0:9) 在 com.google.android.gms.measurement.internal.zzeg.zzo(com.google.android.gms:play-services-measurement-impl@@19.0.0:1) 在 com.google.android.gms.measurement.internal.zzeg.zzq(com.google.android.gms:play-services-measurement-impl@@19.0.0:6) 在 com.google.android.gms.measurement.internal.zzeg.zzi(com.google.android.gms:play-services-measurement-impl@@19.0.0:9) 在 com.google.android.gms.measurement.internal.zzjk.zzl(com.google.android.gms:play-services-measurement-impl@@19.0.0:6) 在 com.google.android.gms.measurement.internal.zzhw.zzu(com.google.android.gms:play-services-measurement-impl@@19.0.0:147) 在 com.google.android.gms.measurement.internal.zzhc.run(com.google.android.gms:play-services-measurement-impl@@19.0.0:1) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 com.google.android.gms.measurement.internal.zzfq.run(com.google.android.gms:play-services-measurement-impl@@19.0.0:6) 2021-06-13 04:14:59.625 30892-30994/com.mafialab.mafia E/FA:未能 打开本地数据库。事件将绕过本地存储: android.database.sqlite.sqliteCantOpenDatabaseException:未知错误代码 2062):无法打开数据库 ############################################### ############### 错误代码:2062 (sqlITE_CANTOPEN_EMFILE) 原因:应用程序打开了太多文件一个进程中的最大可用文件描述符认为 1024。 (未知错误代码 2062):无法打开数据库) ############################################### ##############:com.google.android.gms.measurement.internal.zzef.getWritableDatabase(com.google.android.gms:play-services-measurement-impl@@19.0 .0:9)

解决方法

套接字(网络或管道)确实有文件描述符。

你可以列出它们:

for (f in File("/proc/self/fd").listFiles()) {
    Log.i(TAG,"file : ${f.isFile},${f} -> ${f.canonicalPath}")
}
...
file : false,/proc/self/fd/50 -> /dev/kgsl-3d0
file : false,/proc/self/fd/51 -> /proc/2815/fd/51
file : false,/proc/self/fd/52 -> /proc/2815/fd/52
file : false,/proc/self/fd/53 -> /proc/2815/fd/53
file : false,/proc/self/fd/54 -> /proc/2815/fd/54
file : false,/proc/self/fd/55 -> /proc/2815/fd/55
file : false,/proc/self/fd/56 -> /proc/2815/fd/56
file : false,/proc/self/fd/57 -> /dev/ion
file : false,/proc/self/fd/58 -> /dev/ion
file : false,/proc/self/fd/59 -> /dev/hwbinder
file : true,/proc/self/fd/63 -> /data/app/com.google.android.gms-xErOVYdgUuUxSUGYRGwZ0A==/split_config.en.apk
file : true,/proc/self/fd/64 -> /data/app/com.google.android.gms-xErOVYdgUuUxSUGYRGwZ0A==/split_config.xxhdpi.apk

在 Android 8.0+(API 级别 26)上,可以获得更多详细信息:

for (f in File("/proc/self/fd").listFiles()) {
    try {
        Log.i(TAG,${f} -> ${java.nio.file.Files.readSymbolicLink(f.toPath())}")
    } catch (ex: Exception) {
        Log.w(TAG,"Failed to get info for $f")
    }
}
...
file : false,/proc/self/fd/51 -> socket:[3647176]
file : false,/proc/self/fd/52 -> socket:[3648033]
file : false,/proc/self/fd/53 -> anon_inode:[eventfd]
file : false,/proc/self/fd/54 -> socket:[3648028]
file : false,/proc/self/fd/55 -> socket:[3648030]
file : false,/proc/self/fd/56 -> anon_inode:[eventpoll]
file : false,/proc/self/fd/64 -> /data/app/com.google.android.gms-xErOVYdgUuUxSUGYRGwZ0A==/split_config.xxhdpi.apk

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。