dirty_background_ration 与 /proc/sys/vm/dirty_ratio
wappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。linux的基本默认设置为60,具体如下:
[root@timeserver ~]# cat /proc/sys/vm/swappiness
60
你的内存在使用到100-60=40%的时候,就开始出现有交换分区的使用,内存的速度会比磁盘快很多,这样会加大系统io,同时造的成大量页的换进换出,严重影响系统的性能,所以我们在操作系统层面,要尽可能使用内存,对该参数进行调整。
临时调整的方法如下,我们调成10:
[root@timeserver ~]# sysctl vm.swappiness=10
vm.swappiness = 10
[root@timeserver ~]# cat /proc/sys/vm/swappiness
10
需要在/etc/sysctl.conf修改,加上:
[root@timeserver ~]# cat /etc/sysctl.conf
# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296
vm.swappiness=10
重新加载
[root@localhot~]# sysctl -p
在linux中,可以通过修改swappiness内核参数,降低系统对swap的使用,从而提高系统的性能。
在调优数据库 和应用 性能的过程中需要降低操作系统文件Cache对数据库性能的影响,故调研了一些降低文件系统缓存大小的方法,其中一种是通过修改/proc/sys/vm/dirty_background_ration以及/proc/sys/vm/dirty_ratio两个参数的大小来实现。看了不少相关博文的介绍,不过一直弄不清楚这两个参数的区别在哪里,后来看了下面的一篇英文博客才大致了解了它们的不同。
关于vm.swappiness 参数设定, 文件缓存是一项重要的性能改进,在大多数情况下,读缓存是一个明显的胜利,与使用RAM的应用程序直接平衡。写缓存比较棘手。Linux内核将磁盘写入缓存,并随着时间的推移异步将它们刷新到磁盘。这对加速磁盘I / O有很好的效果,但风险很大。当数据未写入磁盘时,丢失数据的可能性会增加。
也有很多I / O也有可能压倒缓存。曾经一次将大量数据写入磁盘,并且在尝试处理所有数据时看到系统出现大量暂停?这些暂停是缓存决定异步写入太多数据的结果(作为非阻塞后台操作,让应用程序进程继续),并切换到同步写入(阻塞并使进程等到I / O致力于磁盘)。当然,文件系统也必须保留写入顺序,因此当它开始同步写入时,它首先必须降级缓存。因此长时间停顿。
好处是这些是可控制的选项,根据您的工作负载和数据,您可以决定如何设置它们。让我们来看看:
$ sysctl -a | grep dirty
vm.dirty_background_ratio =
vm.dirty_background_bytes =
vm.dirty_ratio =
vm.dirty_bytes =
vm.dirty_writeback_centisecs =
vm.dirty_expire_centisecs =
vm.dirty_background_ratio 是可以填充“脏”页面的系统内存的百分比 - 仍然需要写入磁盘的内存页 - 在pdflush / flush / kdmflush后台进程启动以将其写入磁盘之前。我的例子是10%,所以如果虚拟服务器有32 GB的内存,那么3.2 GB的数据可以在完成任务之前就位于RAM中。
vm.dirty_ratio 是在必须将所有内容提交到磁盘之前可以用脏页填充的绝对最大系统内存量。当系统到达此点时,所有新的I / O块都会被阻塞,直到脏页被写入磁盘。这通常是长I / O暂停的来源,但是可以防止太多数据在内存中被不安全地缓存。
vm.dirty_background_bytes 和 vm.dirty_bytes 是另一种指定这些参数的方法。如果设置_bytes版本,则_ratio版本将变为0,反之亦然。
vm.dirty_expire_centisecs 是在需要写入之前缓存中的某些内容。在这种情况下,它是30秒。当pdflush / flush / kdmflush进程启动时,他们将检查脏页的年龄,如果它比这个值旧,它将被异步写入磁盘。由于在内存中保存脏页不安全,因此也可以防止数据丢失。
vm.dirty_writeback_centisecs 是pdflush / flush / kdmflush进程唤醒的频率,并检查是否需要完成工作。
您还可以在/ proc / vmstat中查看页面缓存的统计信息:
$ cat /proc/vmstat | egrep "dirty|writeback"
nr_dirty
nr_writeback
nr_writeback_temp
在我的情况下,我有878个脏页等待写入磁盘。
方法1:减少缓存
与计算机世界中的大多数事情一样,您如何调整这些取决于您要做的事情。在许多情况下,我们的快速磁盘子系统都有自己的大电池备份NVRAM缓存,因此保留OS页面缓存中的内容是有风险的。让我们尝试以更及时的方式将I / O发送到阵列,并减少我们本地操作系统的机会,借用服务行业中的短语,“ 在杂草中”。为此,我们降低vm.dirty_background_ratio和vm .dirty_ratio通过向/etc/sysctl.conf添加新数字并使用“sysctl -p”重新加载:
vm.dirty_background_ratio =
vm.dirty_ratio =
这是虚拟机以及基于Linux的虚拟机管理程序的典型方法。 我不建议将这些参数设置为零,因为一些后台I / O可以很好地将应用程序性能与磁盘阵列和SAN上的短时间延迟(“尖峰”)分离。
方法2:增加缓存
有些情况下,提高缓存会对性能产生积极影响。这些情况是Linux guest虚拟机中包含的数据并不重要且可能丢失的情况,通常是应用程序反复写入或以可重复的突发形式写入相同文件的情况。理论上,通过允许更多脏页存在于内存中,您将在缓存中反复重写相同的块,并且只需要经常对实际磁盘进行一次写入。为此,我们提出参数:
vm.dirty_background_ratio =
vm.dirty_ratio =
有时人们也会增加vm.dirty_expire_centisecs参数以允许更多时间在缓存中。除了数据丢失风险增加之外,如果缓存已满并且需要降级,您还会面临长时间I / O暂停的风险,因为在大型VM上,缓存中会有大量数据。
方法3:两种方式
还有一些情况下,系统必须处理不频繁的突发流量以减慢磁盘(一小时之前的批处理作业,午夜,写入Raspberry Pi上的SD卡等)。在这种情况下,一种方法可能是允许所有写入I / O都存放在缓存中,以便后台刷新操作可以随时间异步处理它:
vm.dirty_background_ratio =
vm.dirty_ratio =
这里后台进程将在达到5%上限时立即开始写入,但系统不会强制同步I / O直到达到80%满。从那里你可以调整系统RAM和vm.dirty_ratio的大小,以便能够使用所有写入的数据。同样,在磁盘上存在数据一致性的权衡,这转化为数据风险。购买UPS并确保在UPS电量耗尽之前可以降级缓存。:)
dirty_background_ration 与 /proc/sys/vm/dirty_ratio的更多相关文章
- /proc/sys/vm/参数
1) /proc/sys/vm/block_dump该文件表示是否打开Block Debug模式,用于记录所有的读写及Dirty Block写回动作.缺省设置:0,禁用Block Debug模式2) ...
- /proc/sys/vm/ 内存参数
linux下proc里关于磁盘性能的参数 http://blog.csdn.net/eroswang/article/details/6126646 我们在磁盘写操作持续繁忙的服务器上曾经碰到一个特 ...
- linux /proc/sys/vm/中各个文件含义
1) /proc/sys/vm/block_dump该文件表示是否打开Block Debug模式,用于记录所有的读写及Dirty Block写回动作. 缺省设置:0,禁用Block Debu ...
- Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches
Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches 频繁的文件访问会导致系统的Cache使用量大增 $ free -m total used free shared ...
- /proc/sys/vm man手册
Manual page proc(5) line 1967 (press h for help or q to quit) /proc/sys/vm This directory contains f ...
- linux内存——/proc/sys/vm/drop_caches
原贴:http://www.linuxfly.org/post/320/ http://blog.csdn.net/chinalinuxzend/article/category/265273/2 ...
- 手工释放linux内存——/proc/sys/vm/drop_caches
--手工释放linux内存——/proc/sys/vm/drop_caches 总有很多朋友对于Linux的内存管理有疑问,之前一篇日志似乎也没能清除大家的疑虑.而在新版核心中,似乎对这个问题提供了新 ...
- (转)手工释放linux内存——/proc/sys/vm/drop_cache
linux的内存查看: [root@localhost 0.1.0]# free -m total used free shared ...
- /proc/sys/vm/drop_caches 清理缓存
1. 使用方法 /proc/sys/vm/drop_caches默认是0 # echo 1 > /proc/sys/vm/drop_caches; free pagecache, use# ec ...
随机推荐
- stark组件之多级过滤
一.引子 在我们浏览很多页面时,会发现一般情况下都有一个分类的功能,而且还是多个类别同时控制,这就是多级过滤.如下图: 一行代表一个类别,第一行就是展示了所有的出版社,选中后就会以出版社分类,第二行就 ...
- DotNetCore学习-1.读取Json配置并绑定到配置类实例
DotNetCore的程序的配置不再完全局限于XML文件,增加更加通用的Json配置. 读取Json配置文件的类主要在Microsoft.Extensions.Configuration命名空间下,创 ...
- 【Ueditor】富文本编辑使用
前提准备: 在http://ueditor.baidu.com/website/官网下载需要使用的版本.(我选用的1.4.3.1最新版本)因为这是以前做过的一个记录,现在移动到博客园保存记录.所有现在 ...
- [PHP] 算法-原址排序数组使奇数位于偶数前面的PHP实现
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 1.遍历数组,判断元素奇数偶数 ...
- Python全栈学习_day004作业
,写代码,有如下列表,按照要求实现每一个功能 li = ["alex", "WuSir", "ritian", "barry&qu ...
- 关于python访问字典的方法
def stu( **kwargs): # 在函数体内对于kwargs的使用不用带星号 print("大家好,我为大家简单自我介绍以下:") print(type(kwargs)) ...
- python基础之数据的三大结构
python的三大数据结构 1.顺序 2.分支 3.循环 # if语句联系# 如果age小于18岁,则打印信息“未成年”age = 17if age <= 18: print("未成年 ...
- 【读书笔记】iOS-设计简单的Frenzic式益智游戏
如果你决定用UIView动画或Core Animation,一定要编写一些测试用例,模拟游戏可能遇到的要求最高的动画,另外不要忘记播放声音.不要等到最后才增加声音,因为在iPhone上播放音乐和音效确 ...
- ionic3打包不能prod的问题
在最近的项目中,我ionic3采用了懒加载,来提高性能.但是当我普通打包的时候,正常成功了,但是加上--prod的时候,就报错了. 报错如下: 大概意思就是page是声明的一部分,然后请在更高级声明之 ...
- Telephone dialer
运行电话拨号器,需要加这个权限,否则不会打通电话.这个权限是用户权限,是谷歌工程师为了跟自己撇清关系,用户需要权限的时候自己加. 运行android程序的时候提示:ActivityManager: W ...