我们在维护一个大的文件搜索项目的时候发现,服务器运行一段时间以后内存被耗光了,这些被占用的内存似乎不会被释放,导致一些其他的服务报内存不足,所以需要手动释放一些内存。

用free命令可以查看内存的使用情况:

[root@tianjing-ops ~]# free -m
total used free shared buffers cached
Mem: 32232 21766 10465 0 195 20734
-/+ buffers/cache: 836 31395
Swap: 34239 0 34239

在释放内存之前,需要先执行sync命令把缓存中的内容写道磁盘上,避免缓存清空以后文件丢失。

我们可以通过调整/proc/sys/vm/drop_caches这个文件中的值来释放内存:

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

我使用了第三种。

查看系统实际内存的办法:

shell>dmesg |grep [mM][eE][mM]
找到输出中的Memory: 2042524k/2086248k available,其中后面的为物理实际内存大小,而前面为系统可用内存大小,即去掉了内核占用内存、保留内存、数据缓存以后的可用内存。

有时间看一下linux下的内存机制。