CentOS系统手动释放内存

线上集群后端某台Web服务器,我们观察到+buffers/cache值(即Linux内存的实际使用情况)一直都是5365左右,就算停掉Nginx+FastCGI程序也是一样,考虑到这台机器经常在使用rsync+inotify,肯定会存在着频繁存取文件。而Linux系统有一个特性:在Linux下频繁存取文件时,就会占用物理内存。当程序结束时并不会自动释放被占用的内存,而是一直作为Cache存在。实际上内核结束一个程序后,它是会释放内存的,但是内核并没有立刻将这部分收集到free当中,而是存在在cached或者buffer当中,提高系统的io效率,cache和buffered的内存是由内核进行动态的配置管理,如果系统的free大小不够的时候,系统会自动释放cache buffer的内存给程序使用(因此如果是看到used很多,来手动释放内存其实是不需要的,我前面的文章及书籍其实也说明了我们应该如何观察Linux系统的实际内存使用情况,这里就不再多描述了)。 操作步骤: 1、查询当前内存使用情况和释放缓存的参数 free -m 命令结果如示所示: total used free shared buffers cached Mem: 10988 6792 4196 0 168 1001 -/+ buffers/cache: 5622 5365 Swap: 4295 0 4295 查看释放缓存参数的命令,如下所示: cat /proc/sys/vm/drop_caches 0 0为默认值,即表示不释放。 2、使用sync命令,将系统缓存区中的脏数据写入磁盘中,包括已修改的i-node、已延迟的块I/O和读写映射文件,命令如下: sync 3、配置文件/proc/sys/vm/drop_caches中记录了缓存释放的参数,命令如下: echo 3 > /proc/sys/vm/drop_caches 4、不重启机器使配置改生效,命令如下: sysctl -p 执行以上操作以后, + buffers/cache值由5365涨到了9000左右,这个值就恢复正常了,不过我觉得Linux管理内存的方式其实是很优异的,很多时候并不需要手动释放内存。