日期:2014-05-16  浏览次数:20754 次

开发板Linux下SD卡操作问题
各位好,最近项目需要用到SD卡存储历史数据,ARM9+Linux2.6平台下,遇到一个奇怪的问题。
存储历史数据的时候,系统的内存在随之增加,增加的内存差不多就是向SD卡里面写入的数据量大小。程序里面没有malloc后没有free的情况,应该不会出现内存泄露。
怀疑是文件缓存的问题,但是SD卡里面存储数据的文件时每分钟打开,下一分钟关闭再打开的,应该不会出现文件缓存一直增加的情况呀。
另外,SD卡确实是挂载成功了的,取下SD卡看里面的数据也确实写进去了。

麻烦大家帮忙分析一下出现这种情况的可能,拜谢!
------解决方案--------------------
坑太深不懂.
建议试一试,实践是检验.....
试下写超过内存大小的数据到SD卡(中的文件). 看看到底会怎样.(反正没什么损失吧)
可能是内核有IO缓存.比如你每毫秒向一个文件写byte的数据.然后内核觉得这样IO效率不科学.就先存在内存中(速度块嘛),然后在一段时间(或者等数据多点)之后,再一起写到文件中.

man fflush 可能有帮助
------解决方案--------------------
linux的文件缓存机制是这样,到一定时候会回收,可以通过以下方法干预这个过程

echo 3 > /proc/sys/vm/drop_caches
可以回收在内核中申请的缓存

修改/proc/sys/vm/min_free_kbytes中的值可以设定内核预留给上层使用的最小内存大小,可以通过此方法控制文件写时过多使用内存进行缓存