linux下free命令结果解读和内存使用数据理解

free命令:显示Linux系统中物理内存、buffer/cache、swap的使用情况。

virtual-machine:~$ free 
             total       used       free     shared    buffers     cached
Mem:       1025140     747140     278000          0     117244     301936
-/+ buffers/cache:     327960     697180
Swap:      1046524          0    1046524

virtual-machine:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          1001        729        271          0        114        294
-/+ buffers/cache:        320        680
Swap:         1021          0       1021

其他用法 -h -t -o -l -V

解读:

  • Mem
    total: 物理内存大小。
    used: 已使用的内存大小。
    free: 尚未分配使用的内存大小。
    shared: 共享内存大小。
    buffers/cached: 缓冲区和缓存占用的内存大小。

此行将buffers/cached(缓冲区和缓存)占用的内存在内存的使用量里面。

  • -/+ buffers/cache
    used: 程序已使用的内存大小。(Mem.used - (Mem.buffers+Mem.cached))
    free: 可使用的内存大小。 (Mem.free + (Mem.buffers+Mem.cached))

此行buffers/cached(缓冲区和缓存)占用的内存不算在内存的使用量里面。

buffer/cached作用:

  • 简单的说,从磁盘读取到内存的数据在被相关应用程序读取后,如果有剩余内存,则这部分数据会存入cache,以备第2次读取时,避免重新读取磁盘。
  • 当一个应用程序在内存中修改过数据后,因为写入磁盘速度相对较低,在有空闲内存的情况下,这些数据先存入buffer,在以后某个时间再写入磁盘,从而应用程序可以继续后面的操作,而不必等待这些数据写入磁盘的操作完成。

buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached所占得内存会很快地被回收,所以对于应用程序来说,buffers/cached所占的内存部分是完全可用的。

  • Swap
    虚拟内存使用量
    交换分区总量 、使用量 、剩余量

由系统把相关数据从磁盘读取到内存,如果物理内存不够,则把内存中的部分数据导入到磁盘,从而把磁盘的部分空间当作虚拟内存来使用,也称为Swap。


/proc/meminfo中的数据

  • MemTotal — 总的全局可用内存大小(即物理RAM减去保留的以及内核代码占用的,系统启动后一般固定不变)
  • MemFree — 总的全局未使用内存大小
  • MemAvailable — 内核估计出来的全局可用内存大小,非精确值(MemFree不代表所有可用的内存,Cache/Buffer、Slab 均有部分可以临时释放的内存要计算在内)
  • Slab — 内核Slab结构使用的大小(就是那个Slab分配器占用的)

/proc/meminfo 中的MemAvailable 与 free 计算得到的又出入,具体为啥不得而知..
metricbeat 的mem数据据说是从/proc/meminfo 中获取


进程级别用到的内存的几个概念:

  • VSS - Virtual Set Size,虚拟内存大小,包含共享库占用的全部内存,以及分配但未使用内存
  • RSS - Resident Set Size,实际使用物理内存,包含了共享库占用的全部内存
  • PSS - Proportional Set Size,实际使用的物理内存,共享库占用的内存按照进程数等比例划分
  • USS - Unique Set Size,进程独自占用的物理内存,不包含共享库占用的内存

参考了:

posted @ 2019-04-01 16:43  clq.lib  阅读(996)  评论(0编辑  收藏  举报