ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 手工清除linux中的内存

手工清除linux中的内存

原创 Linux操作系统 作者:myownstars 时间:2011-02-24 16:26:41 0 删除 编辑

 

首先查看内存使用状况
[root@testdb mysql]# free -m -t
             total       used       free     shared    buffers     cached
Mem:         15653      15596         56          0         14      11142
-/+ buffers/cache:       4439      11213
Swap:        31996       1901      30094
Total:       47650      17498      30151

/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。操作如下:

[root@testdb2 init.d]# cat /proc/sys/vm/drop_caches
0
[root@testdb2 init.d]# echo 3 > /proc/sys/vm/drop_caches
将其设置为3
[root@testdb2 init.d]# cat /proc/sys/vm/drop_caches
3

[root@testdb mysql]# free -m -t
             total       used       free     shared    buffers     cached
Mem:         15653      12072       3581          0          1       7702
-/+ buffers/cache:       4368      11285
Swap:        31996       1900      30096
Total:       47650      13972      33677

/proc/sys/vm/drop_caches (since Linux 2.6.16)
Writing to this file causes the kernel to drop clean caches,
dentries and inodes from memory, causing that memory to become
free.

To free pagecache, use echo 1 > /proc/sys/vm/drop_caches; to
free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3 >
/proc/sys/vm/drop_caches.

Because this is a non-destructive operation and dirty objects
are not freeable, the user should run sync first.

1、从man可以看到,这值从2.6.16以后的核心版本才提供,也就是老版的操作系统,如红旗DC 5.0、RHEL 4.x之前的版本都没有;
2、若对于系统内存是否够用的观察,我还是原意去看swap的使用率和si/so两个值的大小;
用户常见的疑问是,为什么free这么小,是否关闭应用后内存没有释放?
但实际上,我们都知道这是因为Linux对内存的管理与Windows不同,free小并不是说内存不够用了,应该看的是free的第二行最后一个值:
这才是系统可用的内存大小。
实际项目中告诉我们,如果因为是应用有像内存泄露、溢出的问题,从swap的使用情况是可以比较快速可以判断的,但free上面反而比较难查看。
相反,如果在这个时候,我们告诉用户,修改系统的一个值,“可以”释放内存,free就大了。用户会怎么想?不会觉得操作系统“有问题”吗?
所以说,我觉得既然核心是可以快速清空buffer或cache,也不难做到(这从上面的操作中可以明显看到),但核心并没有这样做(默认值是0),我们就不应该随便去改变它。
一般情况下,应用在系统上稳定运行了,free值也会保持在一个稳定值的,虽然看上去可能比较小。
当发生内存不足、应用获取不到可用内存、OOM错误等问题时,还是更应该去分析应用方面的原因,如用户量太大导致内存不足、发生应用内存溢出等情况,否则,清空buffer,强制腾出free的大小,可能只是把问题给暂时屏蔽了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15480802/viewspace-687879/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-03-18

  • 博文量
    375
  • 访问量
    3159852