Android磁盘异常的问题分析

前言

最近遇到了一个以前没有遇到过的bug,记录一下

现象

在logcat中频繁有 ENOSPC 报错,总是提示磁盘空间不足,导致很多应用都没有办法正常使用,但是偶尔能够恢复。不能自动恢复的时候,重启能够恢复

问题分析过程

等待这个问题复现后查看设备 df -h 发现data占用100% ,但是du -sh 发现和df 看到的磁盘使用不一样
在这里插入图片描述
这个时候如果重启的话磁盘就可以恢复正常占用 50%
在这里插入图片描述
在这中途疑惑了一段时间时间,曾把data分区全部pull出来,发现实际的占用和du计算出来的差不多。当时的心情就是,我屮艸芔茻,什么鬼

后来查看了一下资料,熟悉linux的人应该知道,在linux中当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点。

此时我大胆的猜测,难道说。。。是因为这个原因?顺着猜想继续往下跟

在linux中有个指令 lsof (list open file),通过这个指令导出了所有进程打开的文件,发现storage有异常
在这里插入图片描述
发现30828这个进程有很多打开的文件,但是文件实际上是被标记为已经删除,那么问题应该出现在这个进程中,这个进程打开了很多文件,处于占用状态,一直没有释放。具体原因查代码后发现是在使用了FileInputStream后没有调用 close,这是时候心里就只有一个念头,hashmmp,谁写的。。。所以,论资源释放的重要性!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值