最近换了VPS,内存256,top的时候看到used一直近乎殆尽,但在监控宝里显示应用程序只是用了40%内存,RS也一样,经常是page cached使用过半,实际内存使用并不多。

这谢数据不禁引发了我对linux内存使用的一些猜想,查了一些资料,证实了我的想法。

Linux的设计者应该很牛逼,这种不自动释放肯定是有原因的,个人猜想是缓存机制。查资料之后,果不其然。Linux会尽可能多的使用内存来提升系统的速度和io效率,但是它有相应的机制来释放内存,其实我们可以简单的理解cache和buffer也是free的空间。

Windows是看的,Linux是用的。

哦了,复习去,晚上考试。

 

以下为转载原文:


 

使用Linux会发现一个很奇怪的问题:使用一段时间后(特别是经过了文件的拷贝等操作),用top指令发现内存基本上被占用了,而且Linux不会释放,这个问题的确困扰了我们,我们就开始寻找手动释放内存的方法,的确也找到了。上网搜索也发现很多人存在着这个问题,但是经过对网上结果和我们自己理解的综合分析得出了一个结论:Linux手动释放内存是一个彻彻底底的伪命题。

首先讲解一下top的每个选项的含义: total:所有应用程序可用物理内存 free:未被应用程序使用的内存 used: 已使用内存 total=free+used

shared: 被共享库所占用的共享内存 buffers: 用于文件缓冲的内存 cached:内核缓冲虚拟内存 shared,buffers,cached均包含在used中。

实际上内核结束一个程序后,它实际上时会释放内存的,但是内核并没有立刻将这部分收集到free当中,而是存在在cached或者buffer当中,提高系统的io效率,cache和buffered的内存是由内核进行动态的配置管理,如果系统的free大小不够的时候,系统会自动释放cache buffer的内存给程序使用。(因此如果是看到used很多,来手动释放内存其实是不需要的)

也就是说Linux会尽可能多的使用内存来提升系统的速度和io效率,但是它有相应的机制来释放内存,其实我们可以简单的理解cache和buffer也是free的空间。 什么时候代表你的内存是不够的呢:就是used很多,但是cache和buffer占的比例很小,说明内存不够了。 看到很多网友说看到used占了很多,free很少不爽,简单的心理:free的内存越多看着越快乐??是吗??那可以建立gnu让free的内存显示为cached buffer的总和,相信网友肯定满意了。送各位一句话:Linux的内存是用来用的,windows的内存是用来看的。