linux flush 保证 磁盘,linux cache介绍及控制
参考文档
有关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介绍及控制相关推荐
- linux lvm添加磁盘,Linux下添加磁盘创建lvm分区
shell> fdisk /dev/xvdb #### 选择磁盘 Command (m for help): m #### 帮助 Command action a toggle a bootab ...
- linux buffer 刷到磁盘,Linux下的磁盘缓存 linux page buffer cache深入理解
延伸:linux page buffer cache深入理解 描述:...么我们在分析io问题的时候可能会更加得心应手. Page cache实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会 ...
- linux 虚拟机新增磁盘,linux(虚拟机)下新增磁盘配置
Linux的硬盘识别: (1)"fdisk -l"命令可以列出系统中当前连接的硬盘设备和分区信息.新硬盘没有分区信息,则只显示硬盘大小信息. (2)创建新硬盘分区命令参数: fdi ...
- linux如何压缩磁盘,Linux初级运维(十二)——磁盘及文件系统管理
一.磁盘管理 1. 机械式硬盘: U盘.光盘.软盘.硬盘.磁带 2. 格式化:(Partition) 创建文件系统 MBR:主引导记录 (512byte) Master Boot Record Mai ...
- linux高级格式化磁盘,linux下格式化磁盘及分区
如果新加一块硬盘,linux自动检测出来了,是/dev/sdd,要进行分区首先我们就应该先明白一些关于分区的东西:一块磁盘能被划分成16个不同的分区,主要对应三种分区结构: 主分区:可以创建最多4个, ...
- linux怎么扫描磁盘,Linux中磁盘扫描流程是怎么样的?
通常SCSI总线适配器作为PCI设备的形式存在,其在计算机体系结构中的位置如下图所示:图1 scis host及device在计算机体系结构中的位置 在系统初始化时会扫描系统PCI总线,由于scsi ...
- linux 在线修复磁盘,linux 修复磁盘
目前维护的服务器出现的故障,系统成为只读,重启后报:/dev/VolGroup00/LogVol00:UNEXPECTED INCONSISTENCY;RUN fsck MANUALLY 出现这样的问 ...
- linux制作大容量磁盘,Linux对超大容量磁盘进行分区
最近在Linux上挂载磁盘阵列,需要对一个7T的盘阵进行分区并使用.这个磁盘阵列划分了一个分区(对于Linux来说找到一个/dev/sda设备,空间大小为7T),我想将它分为N个分区,挂载到系统的N个 ...
- linux mount挂载磁盘,linux 挂载磁盘 mount
挂在磁盘操作(还有一个300G的盘没显示出来): [root@iZgo67bo9s3uaijzqrgbaxZ ori]# df -h Filesystem Size Used ...
最新文章
- 世界上最伟大的10个公式,其中一个人尽皆知
- jupyter notebook上完美运行tensorflow、keras
- 克服游戏运营中IB的长尾挑战
- 有没有python与机械结合的工作-Python3从零开始搭建一个语音对话机器人的实现...
- 利用mk-table-checksum监测Mysql主从数据一致性操作记录
- Xshell更改命令提示符以及背景配色
- 指定的服务已经标记为删除_你的电话号码被标记过吗?你知道这件事情还能赚钱吗?...
- 处理测试环境硬盘爆满
- python matplotlib 绘制曲线图,柱状图
- Catch That Cow抓住那只奶牛(BFS,广度优先搜索)
- Vue—实例成员computed和watch
- chip_seq数据分析专题
- 电源篇 -- 升压电路 Boost
- Context and Attribute Grounded Dense Captioning
- bat批处理与adb命令的配合
- 蓝牙耳机电脑玩游戏进入没声音设置
- Android学习笔记——活动,从创建到销毁
- 微型计算机技术中 通过系统把CPU,【单选题】在微型计算机技术中,通过系统 把CPU、存储器、输入设备和输出设备连接起来,实现信息交换。...
- Linux系统之复制粘贴命令
- CCNA初学(第三课)
热门文章
- linux c语言中如何通过进程名获取进程PID(awk命令行指令)popen、pclose
- python matplotlib.pyplot plt.ioff()函数(关闭交互模式用于阻塞程序,不让图片关闭)
- Nginx+Tomcat+memcached负载均衡实现seccion存储
- linux目录统计编程,linux系统编程----统计一个目录下的普通文件个数
- 训练集 测试集 验证集_Python机器学习实战:划分训练集和检验集
- python列拼接dataframe_如何将两个dataframe中的两列合并为新dataframe(pandas)的一列?...
- python爬取知乎标题_python爬知乎热榜
- java实现混合运算_java图形化界面实现简单混合运算计算器
- UAC bypass 理论学习
- BeagleBone Black QNX6.6 BSP中IPL的完善