手头的路由本身内存就比较少,上面又跑了一个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了,老子要的现在就要。嗯,就是这样。