linux内核文件cache机制,Linux内核文件Cache机制

在我们使用Linux时,使用free命令观察系统内存使用情况,如下面空间内存为66053100k。可能很多同事都遇到过一个问题,发现随着时间的推移,内存的free越来越小,而cached越来越大;于是就以为是不是自己的程序存在内存泄漏,或者是硬件、操作系统出了问题?显然,从这里看不出用户程序是否有内存泄漏,也不是内核有Bug或硬件有问题。原因是内核的文件Cache机制。实际上文件Cache的实现是页面Cache,本文后续都以页面Cache来描述。

[root@localhost ~]# free

total       used       free     shared    buffers     cached

Mem:      66053100    1727572   64325528          0     242492     409440

-/+ buffers/cache:    1075640   64977460

Swap:      2097144          0    2097144

当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将数据从存储设备读入到这些内存中,然后再将数据分发给应用程序;当需要往文件中写数据时,操作系统先分配内存接收用户数据,然后再将数据从内存写到磁盘上。文件Cache管理指的就是对这些由操作系统内核分配,并用来存储文件数据的内存管理。

在大部分情况下,内核在读写磁盘时都先通过页面Cache。若页面不在Cache中,新页加入到页面Cache中,并用从磁盘上读来的数据来填充页面。如果内存有足够的内存空间,该页可以在页面Cache长时间驻留,其他进程再访问该部分数据时,不需要访问磁盘。这就是free命令显示内核free值越来越小,cached值越来越大的原因。

同样,在把一页数据写到块设备之前,内核首先检查对应的页是否已经在页面Cache中;如果不在,就在页面Cache增加一个新页面,并用要写到磁盘的数据来填充。数据的I/O传输并不会立即开始执行,而是会延迟几秒左右;这样进程就有机会进一步修改写到磁盘的数据。

内核的代码和数据结构不必从磁盘读,也不必写入磁盘。因此页面Cache可能是下面的类型:

含有普通文件数据的页;

含有目录的页;

含有直接从块设备文件(跳过文件系统层)读出的数据页;

含有用户态进程数据的页,但页中的数据已被交换到磁盘;

属于特殊文件系统的页,如进程间通信中的特殊文件系统shm。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值