参考文档

有关Cache

文件缓存是提升性能的重要手段。毋庸置疑,读缓存(Read caching)在绝大多数情况下是有益无害的(程序可以直接从RAM中读取数据),而写缓存(Write caching)则相对复杂。Linux内核将写磁盘的操作分解成了,先写缓存,每隔一段时间再异步地将缓存写入磁盘。这提升了IO读写的速度,但存在一定风险。数据没有及时写入磁盘,所以存在数据丢失的风险。

同样,也存在cache被写爆的情况。还可能出现一次性往磁盘写入过多数据,以致使系统卡顿。之所以卡顿,是因为系统认为,缓存太大用异步的方式来不及把它们都写进磁盘,于是切换到同步的方式写入。(异步,即写入的同时进程能正常运行;同步,即写完之前其他进程不能工作)。

好消息是,你可以根据实际情况,对写缓存进行配置。

可以看一下这些参数:

[root@host ~]# sysctl -a | grep dirty

vm.dirty_background_ratio = 10

vm.dirty_background_bytes = 0

vm.dirty_ratio = 20

vm.dirty_bytes = 0

vm.dirty_writeback_centisecs = 500

vm.dirty_expire_centisecs = 3000

vm.dirty_background_ratio 是内存可以填充“脏数据”的百分比。这些“脏数据”在稍后是会写入磁盘的,pdflush/flush/kdmflush这些后台进程会稍后清理脏数据。举一个例子,我有32G内存,那么有3.2G的内存可以待着内存里,超过3.2G的话就会有后来进程来清理它。

vm.dirty_ratio 是绝对的脏数据限制,内存里的脏数据百分比不能超过这个值。如果脏数据超过这个数量,新的IO请求将会被阻挡,直到脏数据被写进磁盘。这是造成IO卡顿的重要原因,但这也是保证内存中不会存在过量脏数据的保护机制。

vm.dirty_expire_centisecs 指定脏数据能存活的时间。在这里它的值是30秒。当 pdflush/flush/kdmflush 进行起来时,它会检查是否有数据超过这个时限,如果有则会把它异步地写到磁盘中。毕竟数据在内存里待太久也会有丢失风险。

vm.dirty_writeback_centisecs 指定多长时间 pdflush/flush/kdmflush 这些进程会起来一次。

可以通过下面方式看内存中有多少脏数据:

[root@host ~]# cat /proc/vmstat | egrep "dirty|writeback"

nr_dirty 69

nr_writeback 0

nr_writeback_temp 0

这说明了,我有69页的脏数据要写到磁盘里。

情景1:减少Cache

你可以针对要做的事情,来制定一个合适的值。

在一些情况下,我们有快速的磁盘子系统,它们有自带的带备用电池的NVRAM caches,这时候把数据放在操作系统层面就显得相对高风险了。所以我们希望系统更及时地往磁盘写数据。

可以在/etc/sysctl.conf中加入下面两行,并执行"sysctl -p"

vm.dirty_background_ratio = 5

vm.dirty_ratio = 10

这是虚拟机的典型应用。不建议将它设置成0,毕竟有点后台IO可以提升一些程序的性能。

情景2:增加Cache

在一些场景中增加Cache是有好处的。例如,数据不重要丢了也没关系,而且有程序重复地读写一个文件。允许更多的cache,你可以更多地在内存上进行读写,提高速度。

vm.dirty_background_ratio = 50

vm.dirty_ratio = 80

有时候还会提高vm.dirty_expire_centisecs 这个参数的值,来允许脏数据更长时间地停留。

情景3:增减兼有

有时候系统需要应对突如其来的高峰数据,它可能会拖慢磁盘。(比如说,每个小时开始时进行的批量操作等)

这个时候需要容许更多的脏数据存到内存,让后台进程慢慢地通过异步方式将数据写到磁盘当中。

vm.dirty_background_ratio = 5

vm.dirty_ratio = 80

这个时候,后台进行在脏数据达到5%时就开始异步清理,但在80%之前系统不会强制同步写磁盘。这样可以使IO变得更加平滑。

从/proc/vmstat, /proc/meminfo, /proc/sys/vm中可以获得更多资讯来作出调整。

linux flush 保证 磁盘,linux cache介绍及控制相关推荐

  1. linux lvm添加磁盘,Linux下添加磁盘创建lvm分区

    shell> fdisk /dev/xvdb #### 选择磁盘 Command (m for help): m #### 帮助 Command action a toggle a bootab ...

  2. linux buffer 刷到磁盘,Linux下的磁盘缓存 linux page buffer cache深入理解

    延伸:linux page buffer cache深入理解 描述:...么我们在分析io问题的时候可能会更加得心应手. Page cache实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会 ...

  3. linux 虚拟机新增磁盘,linux(虚拟机)下新增磁盘配置

    Linux的硬盘识别: (1)"fdisk -l"命令可以列出系统中当前连接的硬盘设备和分区信息.新硬盘没有分区信息,则只显示硬盘大小信息. (2)创建新硬盘分区命令参数: fdi ...

  4. linux如何压缩磁盘,Linux初级运维(十二)——磁盘及文件系统管理

    一.磁盘管理 1. 机械式硬盘: U盘.光盘.软盘.硬盘.磁带 2. 格式化:(Partition) 创建文件系统 MBR:主引导记录 (512byte) Master Boot Record Mai ...

  5. linux高级格式化磁盘,linux下格式化磁盘及分区

    如果新加一块硬盘,linux自动检测出来了,是/dev/sdd,要进行分区首先我们就应该先明白一些关于分区的东西:一块磁盘能被划分成16个不同的分区,主要对应三种分区结构: 主分区:可以创建最多4个, ...

  6. linux怎么扫描磁盘,Linux中磁盘扫描流程是怎么样的?

    通常SCSI总线适配器作为PCI设备的形式存在,其在计算机体系结构中的位置如下图所示:图1 scis host及device在计算机体系结构中的位置 在系统初始化时会扫描系统PCI总线,由于scsi ...

  7. linux 在线修复磁盘,linux 修复磁盘

    目前维护的服务器出现的故障,系统成为只读,重启后报:/dev/VolGroup00/LogVol00:UNEXPECTED INCONSISTENCY;RUN fsck MANUALLY 出现这样的问 ...

  8. linux制作大容量磁盘,Linux对超大容量磁盘进行分区

    最近在Linux上挂载磁盘阵列,需要对一个7T的盘阵进行分区并使用.这个磁盘阵列划分了一个分区(对于Linux来说找到一个/dev/sda设备,空间大小为7T),我想将它分为N个分区,挂载到系统的N个 ...

  9. linux mount挂载磁盘,linux 挂载磁盘 mount

    挂在磁盘操作(还有一个300G的盘没显示出来): [root@iZgo67bo9s3uaijzqrgbaxZ ori]# df -h Filesystem            Size  Used ...

最新文章

  1. 世界上最伟大的10个公式,其中一个人尽皆知
  2. jupyter notebook上完美运行tensorflow、keras
  3. 克服游戏运营中IB的长尾挑战
  4. 有没有python与机械结合的工作-Python3从零开始搭建一个语音对话机器人的实现...
  5. 利用mk-table-checksum监测Mysql主从数据一致性操作记录
  6. Xshell更改命令提示符以及背景配色
  7. 指定的服务已经标记为删除_你的电话号码被标记过吗?你知道这件事情还能赚钱吗?...
  8. 处理测试环境硬盘爆满
  9. python matplotlib 绘制曲线图,柱状图
  10. Catch That Cow抓住那只奶牛(BFS,广度优先搜索)
  11. Vue—实例成员computed和watch
  12. chip_seq数据分析专题
  13. 电源篇 -- 升压电路 Boost
  14. Context and Attribute Grounded Dense Captioning
  15. bat批处理与adb命令的配合
  16. 蓝牙耳机电脑玩游戏进入没声音设置
  17. Android学习笔记——活动,从创建到销毁
  18. 微型计算机技术中 通过系统把CPU,【单选题】在微型计算机技术中,通过系统   把CPU、存储器、输入设备和输出设备连接起来,实现信息交换。...
  19. Linux系统之复制粘贴命令
  20. CCNA初学(第三课)

热门文章

  1. linux c语言中如何通过进程名获取进程PID(awk命令行指令)popen、pclose
  2. python matplotlib.pyplot plt.ioff()函数(关闭交互模式用于阻塞程序,不让图片关闭)
  3. Nginx+Tomcat+memcached负载均衡实现seccion存储
  4. linux目录统计编程,linux系统编程----统计一个目录下的普通文件个数
  5. 训练集 测试集 验证集_Python机器学习实战:划分训练集和检验集
  6. python列拼接dataframe_如何将两个dataframe中的两列合并为新dataframe(pandas)的一列?...
  7. python爬取知乎标题_python爬知乎热榜
  8. java实现混合运算_java图形化界面实现简单混合运算计算器
  9. UAC bypass 理论学习
  10. BeagleBone Black QNX6.6 BSP中IPL的完善