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以文件系统中的文件为背景

posted @ 2022-07-06 10:35  liwenchao1995  阅读(764)  评论(0编辑  收藏  举报