本文主要介绍在AMP开发板上,linux系统在进行频繁的读写操作后死机的问题。
问题发现
运行脚本,在AMP开发板上生成100个30M的文件,发现在生成第三个时就死机了。具体结果如下图所示。
解决方案
Linux内核为了加快对文件的读写效率会将文件放入buffer/cache中以保证读写效率,但其实,尽管当应用程序对文件的读写运行结束后,buffer/cache也不会自动释放该部分内存,而是作为缓冲进行保留,等到服务进程在下一次进行相同文件的读写时就可以直接使用,省去了各种重新进行内存初始化的操作。所以这将会导致,当应用进程频繁对不同的文件进行读写时,我们发现可以直接使用的free内存将会越来越少。
目前的解决办法就是我们可以在每次操作后,对buffer/cache进行手动的回收,主要分为两步。
(1) 将内存中数据强制先刷新到磁盘中
sync;
(2) 清理Buffer缓存区域
echo 3 > /proc/sys/vm/drop