在我们使用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。

linux内核文件cache机制,Linux内核文件Cache机制相关推荐

  1. linux内核合并dtb文件,c – 如何修改内核DTB文件

    摘要 我目前正在使用一些自定义板的自定义驱动程序编译Linux内核(内核,模块和DTB).有时我会编译内核并意识到DTB文件中的兼容性字符串不是自定义驱动程序要查找的内容.现在,我可以解决这个问题的唯 ...

  2. linux文件系统启动流程,linux 内核启动过程以及挂载android 根文件系统的过程

    转载 作者:汕头大学-黄珠唐 时间:2009 年10 月29 日 主要介绍linux 内核启动过程以及挂载android 根文件系统的过程,以及介绍android 源代码中文件系统部分的浅析. 主要源 ...

  3. 树莓派Linux内核源码配置、编译、挂载(boot/kernal/根文件)、开启新内核

    目录 一.树莓派Linux源码配置(适合树莓派) 总体概述 配置的三种方式 1.照搬厂家的配置(使用这种方式) 2.参考厂家的配置(感受一下) 3.完全自主配置(需要一定工作经验) 二.树莓派Linu ...

  4. 修改linux编译配置文件,Porting:linux内核编译、配置、修改配置文件、添加.c文件到内核...

    一.linux内核 $:'uname -a $:'uanme -r // 查看linux内核版本,开发板上进入linux后是一样的命令. 早起常常使用的版本:linux 2.6.x 开发板上使用的版本 ...

  5. 在win10查看本机linux的文件,Windows 10变身开发者利器:内置Linux内核,轻松查看Linux子系统文件...

    原标题:Windows 10变身开发者利器:内置Linux内核,轻松查看Linux子系统文件 来源:创事记 终于!在Windows里可以访问Linux文件了. 这表明,微软插入开源界的触角,越来越深入 ...

  6. linux内核学习6:Linux的CPU高速缓存cache和页高速缓存cache,buffer

    一.CPU高速缓存(cache) 参考:https://blog.csdn.net/u014470361/article/details/80060701 参考:https://blog.csdn.n ...

  7. linux kernel and user space通信机制,Linux内核与用户空间通信机制研究.pdf

    ISSN 1009-3044 E-mail:info@CCCC.net.CR ComputerKnowledgeandTechnology电脑知识与技术 http://www.dnzs.net.cn ...

  8. Linux内核概念:per-CPU,cpumask,inicall机制,通知链

    Linux内核概念 per-CPU,cpumask,inicall机制,通知链 rtoax 2021年3月 在英文原文基础上,针对中文译文增加5.10.13内核源码相关内容. 1. Per-cpu 变 ...

  9. linux内核的配置过程,linux内核的配置机制及其编译过程

    linux内核的配置机制及其编译过程. 一.配置系统的基本结构 Linux内核的配置系统由三个部分组成,分别是: 1.Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linu ...

最新文章

  1. sql 怎样 得到 的客户端的ip地址_怎样用卷发棒?正确用法大揭密-装修攻略
  2. 第一章·MySQL介绍及安装
  3. postgresql对于HashJoin算法的Data skew优化与MCV处理
  4. PowerDesigner从数据库导入
  5. c语言用指针变量输入数组的长度,C语言之数组的基础练习题(指针变量做函数参数)...
  6. php图片长宽处理,用php调整图片宽高 | 学步园
  7. 蓝桥杯青少创意编程python组
  8. php 隐藏地址栏,工具栏,php – 我怎么能隐藏#!在浏览器地址栏上?
  9. EasyUI treegrid 获取编辑状态中某字段的值 [getEditor方法获取不到editor]
  10. python面向对象基础知识_面向对象的一些基本知识(python)
  11. 手机离线地图——基于OruxMaps离线高清卫星地图制作发布
  12. 只需3天即可启动应用发布营销核对清单
  13. Python error:Compressed file ended before the end-of-stream marker was reached
  14. 如何爬取商品详情页中的信息
  15. MKL FFT简单调试
  16. 208. Implement Trie (Prefix Tree)(Leetcode每日一题-2021.04.14)
  17. 华为g9青春版连接计算机,华为G9青春版 移动4G(VNS-TL00)一键救砖教程,轻松刷回官方系统...
  18. 《中英双解》leetCode Arranging Coins (排列硬币)
  19. 基于Java+JSP+Servlet的网上商城源码案例
  20. Qt刷新UI界面问题

热门文章

  1. Facebook工程师之死,一个走钢丝的互联网中年男人
  2. 嘘!你与谷歌语音助手的对话,可能已经泄露……
  3. jenkins 启动_通过http请求启动jenkins任务
  4. JavaScript通用表单验证函数
  5. 比尔·盖茨的11条人生箴言
  6. 北京市通信管理局对3·15晚会曝光的北京企业作出行政处罚
  7. 快手推出“一站式开放平台”:千亿流量5亿现金扶持经营伙伴
  8. 加州“电力十足 ” iPhone12加速贬值成全“十三香”
  9. 滴滴更新招股书:预计定价13.5美元 最多筹集约46亿美元
  10. Lyft出售自动驾驶部门给丰田子公司:作价5.5亿美元