一 free命令
1.1 指数参数介绍
第一行:
Mem 内存的使用信息
Swap 交换空间的使用信息
第一行
total 系统总的可用物理内存大小
used 已被使用的物理内存大小
free 还有多少物理内存可用
shared 被共享使用的物理内存大小
buff/cache 被 buffer 和 cache 使用的物理内存大小
available 还可以被 应用程序 使用的物理内存大小
1.2 Buffers和cacahed区别与联系
Buffers是对物理设备上数据的缓存/缓冲,而Cache是文件数据的缓存/缓冲。它们都可以用在读写请求上,根据操作对象的不通,内核将使用Buffers或者Cached来缓存/缓冲数据。
Buffers在操作物理设备时用于加速
Cached 在操作文件/数据结构时用于加速
1.3 free与available的区别和联系
free 与 available 的区别
free 是真正尚未被使用的物理内存数量。
available 是应用程序认为可用内存数量,available = free + buffer + cache (注:只是大概的计算方法)
1.Linux 为了提升读写性能,会消耗一部分内存资源缓存磁盘数据,对于内核来说,buffer 和 cache 其实都属于已经被使用的内存。但当应用程序申请内存时,如果 free 内存不够,内核就会回收 buffer 和 cache 的内存来满足应用程序的请求。这就是稍后要说明的 buffer 和 cache。
2.应用程序可用内存数。系统中有些内存虽然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以MemFree不能代表全部可用的内存,这部分可回收的内存加上MemFree才是系统可用的内存,即:MemAvailable≈MemFree+Buffers+Cached,它是内核使用特定的算法计算出来的,是一个估计值。它与MemFree的关键区别点在于,MemFree是说的系统层面,MemAvailable是说的应用程序层面。
3.实际上available字段的近似计算方法为:free+(buffers+cached)/2,这就是free的作者根据经验的估算,判断buffers和cache里面大约有50%是不可回收的。
所以:可用内存范围: [free free+(buffers+cached)/2]
总结: free就是物理内存还没有使用的量,可以真正可以使用的内存大小。(如家里保险柜里剩余的钱),buff/cache: (用于生活周转的钱),情况好一点的话,free+buff/cache 都能使用,情况不好的话,buff/cache 这些被占用,就只剩下free的大小的内存了,所以最靠谱的说剩余内存,就只说:free的大小就是我们还可以使用的内存的大小。
1.4 无法被回收的内存
无法被回收的内存有哪些?
1.挂载的tmpfs存储的文件,这些文件时直接存储与内存中的;
2.进程使用的共享内存,也是存储于cache中的,这一段不能被回收,可以手动执行 ipcrm -m ID号 进行释放。
3.mmap函数创建出来的内存,此函数通常用于将文件映射至内存中,但是Linux注明的内存注册函数malloc函数在申请大段内存时,使用的也是这个函数,使用mmap函数进行共享内存的申请时,被申请的共享内存也是无法释放的。
1.5 使用top命令按内存使用排序显示
1.使用: top -o %MEM 按内存使用大小进行排序显示