linux下如何清理缓存

手头的路由本身内存就比较少,上面又跑了一个nginx+php的环境,简直慢的爆炸,check的时候发现内存经常被占了很多。
linux的虚拟内存机制,很多时候回导致内存得不到及时释放,有时候内存很少了,kill了很多进程,但是内存还是没有释放,这时候可以尝试一下手动释放,linux是提供了这样的接口的。

echo 1 > /proc/sys/vm/drop_caches

这样就能释放了。

root@IceCreamBox:~# free
             total         used         free       shared      buffers
Mem:        126712        51792        74920            0         7132
-/+ buffers:              44660        82052
Swap:            0            0            0
root@IceCreamBox:~# 
root@IceCreamBox:~# echo 1 > /proc/sys/vm/drop_caches
root@IceCreamBox:~# free
             total         used         free       shared      buffers
Mem:        126712        28328        98384            0          672
-/+ buffers:              27656        99056
Swap:            0            0            0
root@IceCreamBox:~# 

内存一下多了几十M,相对于总共128M的内存还是很客观的。

下面简单介绍一下这条命令。

/proc/sys/vm/drop_caches

proc文件节点,是用户与内核进行通信和数据交换的一个通道,sys/vm/drop_caches字面也好理解,系统的虚拟内存模块保留的一个drop caches的接口,想这个接口发指令就能drop caches,linux这个命名也是6啊,看名知意。
echo的参数:
0 – 不释放
1 – 释放页缓存
2 – 释放dentries和inodes
3 – 释放所有缓存
3还是慎用吧,另外释放内存之前最好sync一下,linux本身将内存中的缓存写回磁盘的时间是30s(印象是这个,如果自己没有调过内核参数的话),sync就是告诉系统,把缓存的东西该写磁盘的写磁盘,老子不等你那个30s了,老子要的现在就要。嗯,就是这样。

猜你喜欢

转载自blog.csdn.net/lixuande19871015/article/details/83148864