gpt4 book ai didi

Android 跟踪文件描述符在生产环境中泄漏

转载 作者:行者123 更新时间:2023-11-29 22:46:03 25 4
gpt4 key购买 nike

有时我们的用户会因为突然无法访问数据库而导致应用程序崩溃:

1) android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file (code 14) 

2) java.lang.RuntimeException: Could not read input channel file descriptors from parcel.

3) android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=1 (# cursors opened by this proc=1)

我注意到在那一刻我什至无法提取 logcat:

07-17 16:57:20.722 E/APP ( 2301): 2019-07-17_16:57:20.598+0300 [FileUtils] logcat extraction error
07-17 16:57:20.722 E/APP ( 2301): java.io.IOException: Error running exec(). Command: [logcat, -d, -v, time] Working Directory: null Environment: null
07-17 16:57:20.722 E/APP ( 2301): at java.lang.ProcessManager.exec(ProcessManager.java:211)
07-17 16:57:20.722 E/APP ( 2301): at java.lang.Runtime.exec(Runtime.java:174)
07-17 16:57:20.722 E/APP ( 2301): at java.lang.Runtime.exec(Runtime.java:247)
07-17 16:57:20.722 E/APP ( 2301): at java.lang.Runtime.exec(Runtime.java:190)
....
07-17 16:57:20.722 E/APP ( 2301): Caused by: java.io.IOException: Too many open files
07-17 16:57:20.722 E/APP ( 2301): at java.lang.ProcessManager.exec(Native Method)
07-17 16:57:20.722 E/APP ( 2301): at java.lang.ProcessManager.exec(ProcessManager.java:209)
07-17 16:57:20.722 E/APP ( 2301): ... 8 more

所以我有一个问题 - 是否有可能进入运行时(在用户设备上)我的进程中所有打开的文件描述符的列表(并将其拉到 logcat,例如)?

附言我未能运行将 logcat 写入文件的进程。但是让转储 app.hprof 文件工作......虽然我没有发现这里有什么特别之处。

最佳答案

这不是对所问确切问题的回答,而是可以帮助您解决问题的答案:确保所有文件描述符都包含在 RAII 类型中,这样您就不会忘记关闭它们。在 Android 中,我们为此使用 unique_fd:https://android.googlesource.com/platform/system/core/+/master/base/include/android-base/unique_fd.h .

这当然只能帮助解决一部分泄漏问题。如果问题实际上是您一次使用了太多的文件描述符,这将无济于事,但它会帮助您解决更常见的忘记关闭文件描述符的情况。

关于Android 跟踪文件描述符在生产环境中泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58456696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com