CursorWindow can not be created due to cursor [memory] leak

来源:互联网 发布:聊天室源码 编辑:程序博客网 时间:2024/05/20 16:41

记录了Android系统上由于cursor泄露导致内存耗尽(error -12)导致的CursorWindow不能再创建的Issue。

[Symptom]

08-30 20:27:36.751 E/CursorWindow(  760): Could not allocate CursorWindow '/data/data/com.android.providers.media/databases/external.db' of size 2097152 due to error -12.
08-30 20:27:36.771 E/JavaBinder(  760): *** Uncaught remote exception!  (Exceptions are not yet supported across processes.)
08-30 20:27:36.771 E/JavaBinder(  760): android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=781 (# cursors opened by pid 3105=781)
08-30 20:27:36.771 E/JavaBinder(  760):  at android.database.CursorWindow.<init>(CursorWindow.java:104)
08-30 20:27:36.771 E/JavaBinder(  760):  at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)
08-30 20:27:36.771 E/JavaBinder(  760):  at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:162)
08-30 20:27:36.771 E/JavaBinder(  760):  at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:156)
08-30 20:27:36.771 E/JavaBinder(  760):  at android.database.CursorToBulkCursorAdaptor.count(CursorToBulkCursorAdaptor.java:184)
08-30 20:27:36.771 E/JavaBinder(  760):  at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:117)
08-30 20:27:36.771 E/JavaBinder(  760):  at android.os.Binder.execTransact(Binder.java:338)
08-30 20:27:36.771 E/JavaBinder(  760):  at dalvik.system.NativeStart.run(Native Method)

[Analysis]

logcat中有很明显的下列输出

Could not allocate CursorWindow '/data/data/com.android.providers.media/databases/external.db' of size 2097152due to error -12

主要是due to error -12, ENOMEM,除非是其它原因内存耗尽,否则一般情况下是cursor泄露;注意errno是-12,如果是-24,EMFILE,则表示是进程内文件描述符耗尽,则未必是cursor泄露的原因。

继续从logcat中向前找,会发现大量的下列输出,

08-30 20:27:24.909 D/dalvikvm( 3105): GC_EXPLICIT freed 1686K, 26% free 15810K/21315K, paused 8ms+16ms
08-30 20:27:24.919 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:24.929 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:24.949 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:24.949 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:24.969 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:24.989 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:24.989 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:24.989 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:24.999 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:24.999 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:24.999 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.009 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.009 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.009 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.019 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.019 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.019 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.019 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.029 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.029 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.029 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.039 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.039 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.039 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.039 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.049 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.049 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.049 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.049 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.049 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.049 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.059 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.059 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.059 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.059 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.059 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.059 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.069 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.069 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.069 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.069 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.069 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.069 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.069 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.079 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.079 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.079 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.079 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.079 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:27:25.079 W/CursorWrapperInner( 3105): Cursor finalized without prior close()

08-30 20:26:57.179 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.189 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.209 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.229 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.249 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.259 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.269 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.279 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.299 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.299 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.299 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.309 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.309 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.309 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.309 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.309 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.319 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.319 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.319 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.319 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.319 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.329 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.339 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.339 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.339 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.349 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.349 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.349 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.359 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.359 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.369 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.369 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.369 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.369 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.369 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.379 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.379 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.389 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.389 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.389 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.389 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.399 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.399 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.399 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.399 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.409 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.409 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.409 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.409 W/CursorWrapperInner( 3105): Cursor finalized without prior close()
08-30 20:26:57.419 W/CursorWrapperInner( 3105): Cursor finalized without prior close()

说明有很明显的cursor leak。

解决办法是找到使用cursor的地方,在使用完毕后cursor.close()即可。

Cursor和CursorWindow的关系,参见Concepts of Cursor and CursorWindow on android platform


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一字螺丝拧花了怎么办 小螺丝卸不下来怎么办 机油螺丝滑丝了怎么办 刚滑双板膝盖滑的疼怎么办 lv包真皮弄脏了怎么办 lv包压变形了怎么办 lv的包包被压了怎么办 固态硬盘太小了怎么办 联想笔记本网络连接不可用怎么办 联想g50玩dnf卡怎么办 手机有wifi电脑没有网怎么办 电脑网卡被禁用了怎么办 win8系统装win7蓝屏怎么办 联想笔记本装win7蓝屏怎么办 联想g40-70开机黑屏怎么办 新主机开不了机怎么办 联想720s笔记本闪屏怎么办 华硕k40ie显卡坏了怎么办 开机黑屏进入bois后怎么办 2根内存条不兼容怎么办 联想笔记本r720系统崩溃怎么办 联想天逸310卡怎么办 新买的鼠标没反应怎么办 联想笔记本触屏鼠标失灵怎么办 无线鼠标接收器丢了怎么办 联想笔记本系统重装失败怎么办 联想笔记本屏幕闪屏怎么办 种植牙螺钉掉了怎么办 水管牙断里面了怎么办 水龙头起泡器不起泡怎么办 14mm乘8mm残留怎么办 宝宝吃了螺丝冒怎么办 收割机滚筒皮带轮键槽滚了怎么办 微信界面变小了怎么办 拉杆箱螺丝掉了怎么办 洗衣机应急门锁没有拉绳怎么办? 奔驰glc发动机声音大怎么办 淋膜机模具螺丝拧不动怎么办 一字螺丝滑丝了怎么办 螺丝拧歪卡住了怎么办 车牌螺丝拧歪了怎么办