linux系统内存实际使用率
Mem:表示物理内存统计
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用情况,这里我们不去关心。
系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存b并不是第一行free 标记的 16936Kb,它仅代表未被分配的内存。
第1行 Mem: total:表示物理内存总量。
used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
free:未被分配的内存。
shared:共享内存,一般系统不会用到,这里也不讨论。
buffers:系统分配但未被使用的buffers 数量。
cached:系统分配但未被使用的cache 数量。
第2行 -/+ buffers/cached:
used:第一行中的used - buffers-cached, 也是实际使用的内存总量。
free:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。
free2 = buffers1 + cached1 + free1 //free2为第二行、buffers1等为第一行
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached.
buffer 与cache 的区别
A buffer is something that has yet to be “written” to disk. A cache is something that has been “read” from the disk and stored for later use 第3行: 第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
更详细的解释参考:Difference Between Buffer and Cache
通过/proc/meminfo 获取内存信息
需要使用的指标有:MemTotal ,MemFree,Buffers,Cached
MemTotal:总内存大小
MemFree: 空闲内存大小
Buffers和Cached:磁盘缓存的大小
直观的看,此时free的内存会非常小,但并不代表可用的内存小,当一个程序需要申请较大的内存时,如果free的内存不够,内核会把部分cached的内存回收,回收的内存再分配给应用程序。所以对于linux系统,可用于分配的内存不只是free的内存,还包括cached的内存(其实还包括buffers)。
下面是我们一台文件服务器,可以看到92G的内存基本全被cache起来了,因为大量访问文件。
参考:
手工释放linux内存——/proc/sys/vm/drop_caches
http://www.linuxfly.org/post/320/
理解Linux的性能
http://www.linuxfly.org/post/114/
Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决
http://www.cnblogs.com/panfeng412/p/drop-caches-under-linux-system.html
Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决(续)
http://www.cnblogs.com/panfeng412/p/3478442.html