linux centos7内存
linux centos7内存
1.1 centos7通过 free -m 剩余内存计算
如图所示:
total:服务器内存总大小;
used:已经使用了多少内存;
free:未被任何应用使用的真实空闲内存;
shared:被共享的物理内存;
buff/cache:缓冲、缓存区内存数,缓存在应用之中(Linux内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是buff/cache。当应用程序没有足够的free内存可用,内核就会从buffer和cache中回收一部分内存来满足应用程序的需求。理论上来说available=free+buffer+cache,但实际上available会小于三者之和,因为不是所有的free/buffer都能释放)
available:真正剩余的可被程序应用的内存数;
available = free + buffer + cache(不会很准确到1M,大体是这样计算)
total - used = buff/cache + free
2.1 buff/cache 之 Cache测试
2.1.1 测试文件写出
启动一个centos的容器
# if(读取随机设备) of(写出到/tmp/file中),每次1M,执行2000次,最终生成一个2000M的/tmp/file文件
dd if=/dev/urandom of=/tmp/file bs=1M count=2000
同时新开一个窗口观察容器内vm的状态
vmstat -w 1
可以看到,io中bo(输出)刚开始还很小(bo=175),后面一下子升高到86116,后来不断持续,一直到236544,后面到0,这时说明2000M的内容已经全部写出完毕。
而这时memory中的buff一直没有增长,cache则一直在增长,free也一直在减少。
2.1.2 测试文件读取
# /tmp/file还是2.1.1中写出的文件
dd if=/tmp/file of=/dev/nul
同时新开一个窗口观察容器内vm的状态
vmstat -w 1
跟上面的文件写出差不多,cache一直在增长,就是io中此时是bi增长了一段时间
结合上面的示例,我们可以总结出来,cache可以用作从文件读取数据的页缓存,也可以用作写文件的页缓存,
总结:free命令中的Cache项 本质上就是对读写磁盘文件的内存缓存
3.1 buff/cache 之 buff测试
我用的/dev/sda1
3.1.1 模拟磁盘块的读取
dd if=/dev/sda1 of=/dev/null bs=1M count=1024
同时打开另外一个窗口监控
既然是读取文件,那么如上所示:io列中的bi在快速变化,说明正在读取
此时Cache基本没有变化,而buff一直在增加。
结合上面的示例,我们可以总结出:buff是对磁盘数据的缓存。
root@7bc18553126f:/# man free
buffers
Memory used by kernel buffers (Buffers in /proc/meminfo)
buffer是对原始磁盘块的临时存储,用来缓存磁盘数据,通常不会特别大(20M左右)。这样内核可以把分散的写集中起来,统一优化磁盘的写入。
4.1 总结
再来总结下buff和cache的不同:
buff
- buff是对原始磁盘块的临时存储,用来缓存磁盘数据,通常不会特别大(20M左右)。这样内核可以把分散的读写集中起来,统一优化磁盘的读取/写入。
cache
- cache是从磁盘读取文件的页缓存,缓存从文件读取的数据,这样,下次访问这些数据时,可以直接从内存中快速获取。
cache和buff都可以是读写的缓存,唯一的不同就是:buffer以裸设备、分区为背景;cache以文件系统中的文件为背景