
本帖最后由 微思网络IT认证 于 2022-7-4 16:56 编辑
今天给大家分享一篇 Linux实用命令大全 希望对大家工作、学习有所帮助;文末有原文链接可供下载:
前言
众所周知,文件系统使用缓存来提升性能,在大部分情况下,当出现大量"读缓存"时,说明内存利用率表现良好;
但如果出现大量"写缓存"则情况开始棘手起来。
写缓存(buffer)原理
Linux 内核将要写入磁盘的数据暂时写入到缓存(buffer),并随着时间的推移异步的将这些数据写入到磁盘;
但这样做的风险是,当数据没有被写入到磁盘时,就有丢失数据的风险(因为此时数据还在内存里,等待被刷入磁盘)
另外,大量的I/O也有可能使缓存不堪重负,你可以尝试一次将大量的数据写入磁盘,此时你会看到系统在处理这些数据时开始频繁的停顿
感到卡顿是因为,由于缓存发现有太多的数据需要异步写入,从而转为同步写入(阻塞,让进程等待,知道I/O被提交到磁盘);
文件系统会保持写入的顺序,所以当发生同步写入时,首先就是清理掉 buffer,因此,所有的写I/O,都将先等待"buffer"数据落盘,就发生了"卡顿"
用户可以根据自己的工作负载对写缓存进行一些设置,首先列出写缓存相关的内核参数:
【每日技术分享】红帽RHCSA/RHCE/RHCA 修改内核buffer配置
下表列出了这些选项的释义
【每日技术分享】红帽RHCSA/RHCE/RHCA 修改内核buffer配置
可以使用命令 cat /proc/vmstat | egrep "dirty|writeback" 来查看缓存的统计信息
【每日技术分享】红帽RHCSA/RHCE/RHCA 修改内核buffer配置
以上输出表示当前系统有 6 个脏页等待磁盘写入
优化方法1: 减少缓存
现代的大多数服务器均使用"SSD固态硬盘"作为存储,I/O读写速度已经大幅题升;
所以将数据保存在缓存中是有风险的,不如尽早将数据落盘,减少内核的操作; 可以通过编辑 /etc/sysctl.conf 文件来实现缓存设置的持久化,修改完后需要执行 sysctl -p 进行立即生效
【每日技术分享】红帽RHCSA/RHCE/RHCA 修改内核buffer配置
以上设置即"当内存中脏页数据超过总内存的5%时,开始执行异步落盘操作;当脏页数据超过总内存10%,开始执行同步落盘操作";
优化方法2: 增加缓存
在某些特殊的场景下,提高写缓存反而对性能有着积极的影响;
如下场景: 虚拟机上包含的数据并不是最关键数据(即使丢了也没事),并且这些数据是由应用程序重复的、突发的,频繁的一直写入同一文件;
所以理论上我们可以允许更多的写缓存存在,这样只会在内存中反复的重写相同的"数据块",只需要每隔一段时间后,将脏数据落盘一次
在这种场景下,我们可以设置如下参数:
【每日技术分享】红帽RHCSA/RHCE/RHCA 修改内核buffer配置
以上设置即"当内存中脏页数据超过总内存50%后,才开始异步落盘,当脏页数据超过80%时,开始同步落盘"; 也可以配置 vm.dirty_expire_centisecs 参数来增加缓存保留的时间
应对突发性的慢速磁盘I/O特殊场景
在某些场景下,服务器的磁盘性能较差,而系统的业务会有突发性的写入I/O请求; 由于磁盘缓慢,我们需要将数据尽可能都保留在缓存里,然后"涓流的写回磁盘"
可以这样设置:
【每日技术分享】红帽RHCSA/RHCE/RHCA 修改内核buffer配置
最后注意,这些参数并没有什么固定的值,一切都需要根据业务场景的状态来设置
|
-
【每日技术分享】红帽RHCSA/RHCE/RHCA 修改内核buffer配置
-
-
课外-5.修改内核buffer配置(已发).pdf
404.51 KB, 下载次数: 4, 下载积分: 金币 -2
【每日技术分享】红帽RHCSA/RHCE/RHCA 修改内核buffer配置
|