free命令
此命令⽤于显示系统内存的使⽤情况,包括总体内存、⼰经使⽤的内存;还可⽤于显示系统内核使⽤的缓冲区,包括缓冲(buffer)和缓存(cache)等。
root@ecs-x-large-2-linux-20200309113627:/home/etcd_msg_server# free
total used free shared buff/cache available
Mem: 4038676 375516 789376 7868 2873784 3373968
Swap: 0 0 0
- Mem :内存的使用情况
- Swap:交换空间的使用情况
- total:系统总的可用物理内存和交换空间的大小
- used:已经被使用的物理内存和交换空间
- free:还有多少物理内存和交换空间可用使用
- shared:被共享使用的物理内存大小
- buff/cache:被buffer和cache使用的物理内存大小
- available:还可以被应用程序使用的物理内存大小
free 和 acailable的区别
free是真正尚未被使用的物理内存数量。available它是从应用程序的角度看到的可用内存数量。linux内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是buffer和cache。所以对于内核来说,buffer和cache都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的free内存可用,内核就会从buffer和cache中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available = free + buffer + cache。请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差
root@ecs-x-large-2-linux-20200309113627:/home/etcd_msg_server# free -h
total used free shared buff/cache available
Mem: 3.9G 366M 770M 7.7M 2.7G 3.2G
Swap: 0B 0B 0B
每隔10秒输出一次
root@ecs-x-large-2-linux-20200309113627:/home/etcd_msg_server# free -h -s 10
total used free shared buff/cache available
Mem: 3.9G 369M 767M 7.7M 2.7G 3.2G
Swap: 0B 0B 0B
total used free shared buff/cache available
Mem: 3.9G 369M 767M 7.7M 2.7G 3.2G
Swap: 0B 0B 0B
1、Buffer(缓冲区)是系统两端处理速度平衡(从⻓时间尺度上看)时使⽤的。它的引⼊是为了减⼩短期内突发I/O的影响,起到流量整形的作⽤。⽐如⽣产者——消费者问题,他们产⽣和消耗资源的速度⼤体接近,加⼀个buffer可以抵消掉资源刚产⽣/消耗时的突然变化。
2、Cache(缓存)则是系统两端处理速度不匹配时的⼀种折衷策略。因为CPU和memory之间的速度差异越来越⼤,所以⼈们充分利⽤数据的局部性(locality)特征,通使⽤存储系统分级(memory hierarchy)的策略来减⼩这种差异带来的影响。
3、假定以后存储器访问变得跟CPU做计算⼀样快,cache就可以消失,但是buffer依然存在。⽐如从⽹络上下载东⻄,瞬时速率可能会有较⼤变化,但从⻓期来看却是稳定的,这样就能通过引⼊⼀个buffer使得OS接收数据的速率更稳定,进⼀步减少对磁盘的伤害。