问题背景:
在嵌入式Linux系统产品稳定性测试过程中,我们最关心也是最重要的问题是内存泄漏问题。
一般嵌入式产品内存容量比较有限,我们除了分析代码层次的内存泄漏缺陷外,还实时监测系统运行的内存状态。以免过度使用内存导致系统将进程kill掉的情况。本文主要分析下Cache内存占用的原因,解决办法以及对系统运行的影响;
问题分析:
在嵌入式Linux系统中使用free命令可以看到如下信息:
# free
total used free shared buffers cached
Mem: 247400 123764 123636 33236 7728 63292
-/+ buffers/cache: 52744 194656
Swap: 0 0 0
#
可以简单看到内存的总容量、free容量、缓存占用的buffers、cached容量;
Linux下内存占用多的原因和机制为:
当linux第一次读取一个文件运行时,一份放到一片内存中cache起来,另一份放入运行程序的内存中,正常运行,当程序运行完,关闭了,cache中的那一分却没有释放,第二次运行的时候,系统先看看在内存中是否有一地次运行时存起来的cache中的副本,如果有的话,直接从内存中读取,那样,速度就快多了。
说明这种情况的很典型的例子是启动fir