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,进程独自占用的物理内存,不包含共享库占用的内存
参考了:
- 1 https://blog.csdn.net/bingqingsuimeng/article/details/51858858
- 2 https://mp.weixin.qq.com/s?src=11×tamp=1554107070&ver=1519&signature=THUcgFt7UET4P5DLIyHqpa5GbS5eENSmsmnL9ZRjlSM6YUa1juO-33SMBGozZZbIuk1-t946XTntr1yIf2CDshNi8W2-M*23qR5RydV6b6d60cp4sUocSW6HojnOLazQ&new=1
- 3 https://mp.weixin.qq.com/s?src=3×tamp=1554107070&ver=1&signature=EAJiDLQkSR9ZeiKNJ9sNybZwSBoLkuAmSsF6ydQe3QPVMQjQwdtIMM2T4bp0V5r1RcUxQw4KBARJqaAWbsK3Ytwr2mvU8Vq3T4X03Os35WsvncDH9Gefpf6Vy6Va3hd2xZWqgjT6IiJNWFS0gUAl*bmhYMl3dPTKPuyOkrCjs=