文件系统缓存

filesystem cache

许多人没有意识到。文件系统缓存对于性能的影响。Linux系统默认的设置倾向于把内存尽可能的用于文件cache,所以在一台大内存机器上,往往我们可能发现没有多少剩余内存。(free命令显示的第二行输出,如下)。文件系统cache可以加速磁盘操作,使系统有更好的IO性能,代价只是把一些空闲的内存利用起来了。

我们需要预留多少内存做文件系统cache呢? 首先我们要理解“free”命令

             total       used       free     shared    buffers     cached
Mem: 2058824 1772172 286652 0 214708 879744
-/+ buffers/cache: 677720 1381104
Swap: 1048568 84 1048484

对于如上的命令输出,我们看下Mem 节,total列显示我们一共有2G内存。used列显示我们使用了约1.8G内存(1772172),快接近总内存了。其实used列包含了用于文件系统cache的部分,真实用到的内存可能远远没有这么多。

我们查看“-/+ buffers/cache.” 节,这里的“used”列(677,720)表明实际使用了多少内存。 “free”列=Mem节的buffers+cached+free ,即 free = 214708+879744+286652 = 1381104 ,表明如果bffers和cache都是空的,我们拥有多少空闲内存。所以这台机器实际只是用来661M内存(677720/1024/1024) .

那么,对于这个应用,这是合适的cache分配吗?需要更多内存用于cache吗?是否有浪费资源呢?答案是“依情况而定”。

cache的规则很简单:你希望cache能够尽可能满足正在执行的工作。从应用程序栈的角度考虑,越往下层,cache越不那么高效,越不知道应该缓存哪些内容,那么你就可能需要更大的内存,想想看磁盘阵列的巨大的cache就知道了。所以,如果你的应用程序有能力去cache,你最好把内存更多留给你的应用程序,而不是文件系统缓存。当然,也不是把所有空闲内存都分配给应用程序,因为文件系统缓存在一些场合仍然有用,比如写日志,我们也可能需要额外的buffers。但是如果让你做一个选择,是给你的数据库10GB内存还是给文件系统cache 10G内存,显然你应该把内存给数据库。所以高效的磁盘数据库往往自己实现了存储子系统,而不是依赖于文件系统缓存,从理论上来说,MySQL Innodb这样实现了自己的存储引擎,可以更智能的缓存数据的数据库天然就比Mongodb这样依赖文件系统来刷新数据的数据库高效得多。
所以,对于我们的操作系统,free命令显示出的空闲内存,应该更多关注-/+ buffers/cache:   这节内容。这表明了你的系统可能还剩余的空闲内存。我们需要确保我们有足够的剩余用于以后的负荷增长。对于数据库类应用,很多时候,我们希望越过文件系统,但对于一些日志操作,仍然需要利用文件系统cache的,由于文件系统cache不够可能导致对磁盘的压力突然增加,对于非数据库的其他应用,比如web服务器,虚拟机,往往利用好文件cache更高效,特别是对于改善IO有好处。

转载自:http://www.db110.com/文件系统缓存/

Linux 文件系统缓存 -针对不同数据库有不同作用的更多相关文章

  1. Linux 文件系统缓存dirty_ratio与dirty_background_ratio两个参数区别

    文件系统缓存dirty_ratio与dirty_background_ratio两个参数区别 (2014-03-16 17:54:32) 转载▼ 标签: linux 文件系统缓存 cache dirt ...

  2. linux文件系统 - 初始化(二)

    加载initrd(上) 一.目的 本文主要讲述linux3.10文件系统初始化过程的第二阶段:加载initrd. initrd是一个临时文件系统,由bootload负责加载到内存中,里面包含了基本的可 ...

  3. linux文件系统初始化过程(5)---加载initrd(下)

    一.目的 linux把文件分为常规文件.目录文件.软链接文件.硬链接文件.特殊文件(设备文件.管道文件.socket文件等)几种类型,分别对应不同的新建函数sys_open().sys_mkdir() ...

  4. Linux文件系统的目录结构详解

    Linux文件系统的目录结构详解   一.前 言 文章对Linux下所有目录一一说明,对比较重要的目录加以重点解说,以帮助初学者熟练掌握Linux的目录结构. 二.目 录 1.什么是文件系统 2.文件 ...

  5. Linux 文件系统剖析

    [转自]https://www.ibm.com/developerworks/cn/linux/l-linux-filesystem/ 按照分层结构讨论 Linux 文件系统 在文件系统方面,Linu ...

  6. linux文件系统相关资料

             linux下文件系统通常是通过虚拟文件系统(VFS)蔽下层具体文件系统操作的差异,为上层的操作提供一个统一的接口.文件系统底层都是用系统IO缓存层提供的块读写接口,实现逻辑块到物理块 ...

  7. 区块链阶段1-Linux基础- 2 Linux文件系统

    2.1 什么是文件系统 文件系统是操作系统在磁盘或分区上组织文件的方法和数据结构.负责对磁盘空间进行组织和分配,存储文件数据,并对其提供保护和检索服务.学习Linux,首先需要了解整个 Linux 文 ...

  8. linux文件系统体系结构 和 虚拟文件系统(VFS)

    图 1. Linux 文件系统组件的体系结构 用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开.读取.写和关闭)提供用户接口.系统调用接口的 ...

  9. 磁盘、分区及Linux文件系统 [Disk, Partition, Linux File System]

    1.磁盘基础知识 1.1 物理结构 硬盘的物理结构一般由磁头与碟片.电动机.主控芯片与排线等部件组成:当主电动机带动碟片旋转时,副电动机带动一组(磁头)到相对应的碟片上并确定读取正面还是反面的碟面,磁 ...

随机推荐

  1. IDLE与pycharm执行相同代码结果却不同,原因分析

    最近在熟悉Python的class类的时候,无意中发现同样的代码,在pycharm和IDLE中结果不同,闲话少说先上代码: class aa(): def __init__(self,name): p ...

  2. crontab 定时删除

    /60 * * * /bin/find /usr/local/****/****/****/****/****.log.2019* -exec rm -f {} ; >/dev/null 2&g ...

  3. (一)Django项目的目录结构

    1.将app放在apps文件夹中,将改文件夹设置为 source root,便于引用.两个app不可以互相引用,可以利用第三个app实现一些操作. 2.将一些多媒体文件放在media中的相应app名称 ...

  4. [洛谷P5431]【模板】乘法逆元2

    题目大意:给定$n(n\leqslant5\times10^6)$个正整数$a_i$,和$k$.求:$$\sum_{i=1}^n\dfrac{k^i}{a_i}\pmod p$$题解:$$令P=\pr ...

  5. 1)NET CORE 重新认识 .net & .net core

    最近想系统性的学习下.net core ,在这之前我想再重新的认识下.net ,以及跟.net core 的区别. 有些我们开发.net经常用到的词汇可能还不是很了解,或者不能清晰的出他们的关系与却别 ...

  6. PKPM BIMViewer的使用

    模型的使用,目前有两个方案, 一个是使用全局组件,在单页面的主页面中进行嵌套 <template> <div id="model"> <!-- 这样的 ...

  7. ZK中使用JS读取客户端txt文件内容问题

    最近写一个需求时遇到一个问题,用户需要通过点击一个按钮直接读取他自己电脑上D盘的一个txt文件内容显示到页面,因为项目现在是用ZK写的.我对于ZK也是刚刚了解不就,很多都还不是很熟.起初我是想用io流 ...

  8. 【JSP】layui+jsp,根据后台数据给复选框默认勾选

    1.项目中经常使用复选框,当重复加载,就需要从数据库给复选框一个默认的值了. 2.接下来使用的是JSP中迭代的方法,给复选框绑定值.思路和方法不一定好,仅供参考. <input type=&qu ...

  9. day33-python之多线程

    1.多线程实例 # import threading # import time # # import threading import time class MyThread(threading.T ...

  10. VsCode使用setting sync 同步自己的插件和设置等

    直接再 Vscode中安装就可以,然后: 1. 可以点看setting sync插件在vscode 这个时候可以按照提示进行设置(也可以参考下:https://www.cnblogs.com/kenz ...