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

linux内存cached释放
我们用free命令查看系统内存使用情况的时候会发现:
#free -m
? ? ? ? ? ? ?total ? ? ? used ? ? ? free ? ? shared ? ?buffers ? ? cached
Mem: ? ? ? ? 24359 ? ? ?11240 ? ? ?13119 ? ? ? ? ?0 ? ? ? ? ?0 ? ? ?10706
-/+ buffers/cache: ? ? ? ?533 ? ? ?23826
Swap: ? ? ? ? 4095 ? ? ? ? ?0 ? ? ? 4095
?
1、total = used + free
2、cached比较大,甚至我遇见过内存剩余只有7M的情况,这个时候cached非常大,基本上接近等于total了,这个时候打开文件或者传输文件的时候可用内存很小,程序可能就会用到交换分区swap了,所以会发现机器速度变慢的情况
?
如何解决这个导致机器变慢的问题呢?
罪魁祸首就是内存都被cached了,free的基本没有了
所以我们应该想想如何把cached内存释放出来
重启机器肯定是可以解决,但是我们肯定是不能用这样的办法
?
释放方法有三种(系统默认值是0,释放之后你可以再改回0值):
To free pagecache: ?echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes: ?echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes: ?echo 3 > /proc/sys/vm/drop_caches
?
经常使用rsync传输大量数据的朋友可能遇到过类似的情况:开始是传输大量文件过去,到后来传输的数据并不大,但就是很慢很慢,到对边的服务器上看会发现在终端输入命令都不会觉得慢,但看内存使用情况时,发现free的内存很少,几乎接近零了,我觉得可能就是内存都被cached了导致的
?
为什么我们要释放掉cached内存?因为我们用rsync传输大量数据的时候,linux系统将一部分文件的信息缓存在内存中,这样是可以减少频繁使用的文件的磁盘IO时间占用,当我们传完一批文件后,我们要传输另外一批文件过去,是完全不同的文件或者文件的内容发生了变化,内存中缓存的文件也不是我们需要的了,我们需要清空缓存,腾出内存用来传输下一批文件使用,这个时候我们急切的需要看到更多的内存是free状态的。
?
在这样的前提下,我们有必要自己手动清空缓存,腾出更多可用内存来
?
注意:在清空缓存前我们需要在linux系统中执行一下sync命令,将缓存中的未被写入磁盘的内容写到磁盘上

转自:http://hi.baidu.com/xingxuejun/blog/item/de79514e05bfdc1bb2de0542.html


?0?–?不释放
1?–?释放页缓存
2?–?释放dentries和inodes
3?–?释放所有缓存?