正确理解Linux Server的内存使用率

来源:互联网 发布:知乎下载电脑版 编辑:程序博客网 时间:2024/06/04 00:22

在性能测试中关于Linux服务器,基本上都会有这样一个问题,服务器的内存使用率应该是多少? 服务器有足够的内存么?

我们首先使用top来实时查看进程,CPU使用率,内存使用率等等,类似于MS Window下的任务管理器,下图是一台Linux Server的运行结果:


可以看到 Mem:  33015148k total, 27321116k used,  5694032k free,   264136k buffers 

那我们能不能得出一个结论,内存使用率=used/total=27321116k/33015148k=82.7%? 可是实际上运行的任务并不多,为什么会有这么高的内存使用率? 而且即使停止一些进程的服务器内存也不会释放太多,此时即使运行一些很占内存的应用也没有任何问题,这是为什么呢?  答案其实很简单,这些看起来used很多的内存中,相当一部分部分是缓存,这就要说到Linux的内存管理机制了。


Linux中的Cache Memory
 Linux内存管理的一个原则就是尽量利用闲置的内存来提高系统整体性能。当读写文件的时候,Linux内核为了提高读写性能与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致在Linux系统在使用一段时间后,可用物理内存会逐渐变少。实际上Cache Memory在需要使用内存的时候会自动释放,所以完全不必担心Cache占用太多内存,可以认为Cached=Free.

那缓存改怎么查看? 注意看在Top命令的输出结果中,Mem那行后面有个buffers ,Swap那行后面有个cached,这两个就是缓存大小。所以如果要计算应用程序真正使用物理内存的情况,应该是Used-Cached-buffers才对,所以刚才top看到的物理内存使用情况为27321116k-264136k-14474764=12582216。所以内存使用率也不过40%。

另外,如果单纯想要看内存使用情况,用free命令其实更直观,下图是在相同的机器上运行 free -m 的结果:


其中第一行用全局角度描述系统使用的内存状况: 
total - 总物理内存 
used - 已使用内存,一般情况这个值会比较大,因为这个值包括了cache+应用程序使用的内存 
free - 完全未被使用的内存 
shared - 应用程序共享内存 
buffers - 缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增加) 

cached - 缓存,用于已打开的文件 


注意-/+ buffers/cache:
-buffers/cache - 不包括缓存,应用程序物理内存使用情况,即 -buffers/cache=used-buffers-cached ,所以此时应用程序才用了12288MB内存 。 

+buffers/cache - 所有可供应用程序使用的内存大小,free加上缓存值,即+buffers/cache=free+buffers+cached ,所以此时还有19953MB内存可供程序使用。 




0 0
原创粉丝点击