今天惊愕地发现,主节点上8G内存被不知道什么进程吃掉了整整6G有余,正常的计算快要维持不下去了,遂处理之。 先看看内存使用状况 [root@node1 ~]# free -m total used free shared buffers cached Mem: 8004 6557 1446 0 163 5630 -/+ buffers/cache: 763 7240 Swap: 1983 0 1983 其中: total 内存总数 used 已经使用的内存数 free 空闲的内存数 shared 多个进程共享的内存总额 buffers Buffer Cache和cached Page Cache 磁盘缓存的大小 -buffers/cache 的内存数:used - buffers - cached +buffers/cache 的内存数:free + buffers + cached 可用的memory=free memory+buffers+cached 把内存里的数据暂时写到硬盘里 [root@node1 ~]# sync 修改 /proc/sys/vm/drop_caches文件(/proc/sys/vm/drop_caches的默认值为0) [root@node1 ~]# echo 3 > /proc/sys/vm/drop_caches [root@node1 ~]# cat /proc/sys/vm/drop_caches 再看内存 [root@node1 ~]# free -m total used free shared buffers cached Mem: 8004 631 7372 0 0 60 -/+ buffers/cache: 570 7433 Swap: 1983 0 1983 终于释放出来了。 有关/proc/sys/vm/drop_caches的用法在下面进行了说明(原文:http://www.linuxinsight.com/proc_sys_vm_drop_caches.html): Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.To free pagecache:
echo 1 > /proc/sys/vm/drop_cachesTo free dentries and inodes:
echo 2 > /proc/sys/vm/drop_cachesTo free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_cachesAs this is a non-destructive operation, and dirty objects are not freeable, the user should run "sync" first in order to make sure all cached objects are freed.
This tunable was added in 2.6.16.
真实情况是 “当有某程序需要占用大内存时linux会自动释放cache” linux的理念是内存空着不用白不用,因此会使用空闲内存来做buffer和cache。 我的一台虚拟机运行了JBOSS,在运行一段时间后,查看内存使用情况: [root@JBOSS ~]# free -m total used free shared buffers cached Mem: 3949 2928 1021 0 308 1278 -/+ buffers/cache: 1341 2608 Swap: 4094 0 4094 可以看出,内存已用2928M,但实际除去 buffers/cache后实际只使用了1341M。
你若不管它,内存是不会释放的,而且也没必要释放。
---
转载请注明本文标题和链接:《Linux 释放内存方法和原理》
发表评论