之前的一个项目 ,需要测试读取大文件的时间。但是连续两次读取该文件,会发现时间差异很大。比如第一次需要1分22秒,而第二次只需要5秒的时间 。究其原因 ,是因为linux会 自动缓存一部分文件在内存中去,这样第二次读取的时候,实际上并没有由硬盘到内存的传输。
第一次运行:
[root@test25450 test]# time ./a.out
file size is 8852635648
real 1m21.566s
user 0m0.002s
sys 0m11.386s
第二次运行
[root@test25450 test]# time ./a.out
file size is 8852635648
real 0m5.590s
user 0m0.002s
sys 0m5.588s
可以使用free命令查看当前cache住的容量,使用free命令
[root@test25450 test]# free -g
total used free shared buffers cached
Mem: 31 8 22 0 0 8
-/+ buffers/cache: 0 31
Swap: 7 0 7
上面的结果表明内存中有8G的空间是缓存的硬盘的文件(不用担心cache使用的内存过大,因为如果程序需要,cache所占的内存容量可以快速释放掉)
使用以下命令可以释放掉cache
[root@test25450 test]# echo 3 > /proc/sys/vm/drop_caches
重新再跑一次程序,发现使用的时间又恢复到了1分22秒
本文探讨了在Linux环境下连续两次读取同一文件时时间差异显著的现象,并解释了这是由于Linux内核缓存机制所致。文章通过具体实验数据展示了缓存前后的时间对比,并提供了释放缓存的方法。
3689

被折叠的 条评论
为什么被折叠?



