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.dirty_background_ratio:这个参数指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如5%)就会触发pdflush/flush/kdmflush等后台回写进程运行,将一定缓存的脏页异步地刷入外存;
 
vm.dirty_ratio:而这个参数则指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如10%),系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多,为了避免数据丢失需要将一定脏页刷入外存);在此过程中很多应用进程可能会因为系统转而处理文件IO而阻塞。
 
之前一直错误的一位dirty_ratio的触发条件不可能达到,因为每次肯定会先达到vm.dirty_background_ratio的条件,后来才知道自己理解错了。确实是先达到vm.dirty_background_ratio的条件然后触发flush进程进行异步的回写操作,但是这一过程中应用进程仍然可以进行写操作,如果多个应用进程写入的量大于flush进程刷出的量那自然会达到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的更多相关文章

  1. /proc/sys/vm/参数

    1) /proc/sys/vm/block_dump该文件表示是否打开Block Debug模式,用于记录所有的读写及Dirty Block写回动作.缺省设置:0,禁用Block Debug模式2) ...

  2. /proc/sys/vm/ 内存参数

    linux下proc里关于磁盘性能的参数 http://blog.csdn.net/eroswang/article/details/6126646  我们在磁盘写操作持续繁忙的服务器上曾经碰到一个特 ...

  3. linux /proc/sys/vm/中各个文件含义

    1)      /proc/sys/vm/block_dump该文件表示是否打开Block Debug模式,用于记录所有的读写及Dirty Block写回动作. 缺省设置:0,禁用Block Debu ...

  4. Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches

    Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches 频繁的文件访问会导致系统的Cache使用量大增 $ free -m total used free shared ...

  5. /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 ...

  6. linux内存——/proc/sys/vm/drop_caches

      原贴:http://www.linuxfly.org/post/320/ http://blog.csdn.net/chinalinuxzend/article/category/265273/2 ...

  7. 手工释放linux内存——/proc/sys/vm/drop_caches

    --手工释放linux内存——/proc/sys/vm/drop_caches 总有很多朋友对于Linux的内存管理有疑问,之前一篇日志似乎也没能清除大家的疑虑.而在新版核心中,似乎对这个问题提供了新 ...

  8. (转)手工释放linux内存——/proc/sys/vm/drop_cache

    linux的内存查看: [root@localhost 0.1.0]# free -m                   total       used       free     shared ...

  9. /proc/sys/vm/drop_caches 清理缓存

    1. 使用方法 /proc/sys/vm/drop_caches默认是0 # echo 1 > /proc/sys/vm/drop_caches; free pagecache, use# ec ...

随机推荐

  1. R语言实战(三)——模拟随机游走数据

    一.模拟随机游走数据示例 x <- matrix(0,1000,1) for(i in 1:1000){ x[i+1] <- x[i]+rnorm(1) } plot(x,type=&qu ...

  2. VSCode git Warning LF will be replaced by CRLF

    本文参考自:http://www.yulongjun.com/linux/20170518-08-lf-cr/ 我们打开Visual Studio Code编辑器,可以看到右下角有这个LF,这是VS ...

  3. 通向全栈之路(6)—无密码ssh连接

    (1)在用户目录下新增一个 .ssh文件 mkdir .ssh (2)生成公钥.私钥 ssh-keygen -t rsa -b 4096 -C "mail@xxx.com" (3) ...

  4. 百度api查询多个地址的经纬度的问题

    在使用百度api查询多个地址的经纬度的时候,由于百度api提供的经纬度查询方法是回调函数,并且后续操作必须等经纬度获取完成才能进行,问题就存在于怎么判断所有地点是否都回调完成了,问了之前的一个前端大佬 ...

  5. 微信小程序支付最容易犯的坑notify_url(支付回调)

    最近做了微信小程序支付,支付成功之后发现notify_url回调地址竟然没有访问. 检查了无数次代码,下单结果里面的回调地址看了又看,都没有错啊. 把回调地址复制出来到浏览器上面,外网也是可以访问的啊 ...

  6. PowerDesigner 参照完整性约束(转载)

    PowerDesigner 参照完整性约束: 限制(Restrict):不允许进行修改或删除操作.若修改或删除主表的主键时,如果子表中存在子记录,系统将产生一个错误提示.这是缺省的参照完整性设置. 置 ...

  7. Hive数据倾斜

    数据倾斜是进行大数据计算时最经常遇到的问题之一.当我们在执行HiveQL或者运行MapReduce作业时候,如果遇到一直卡在map100%,reduce99%一般就是遇到了数据倾斜的问题.数据倾斜其实 ...

  8. springMVC 拦截器源码解析

    前言:这两天学习了代理模式,自然想到了 springmvc 的 aop 使用的就是动态代理,拦截器使用的就是 jdk 的动态代理.今天看了看源码,记录一下.转载请注明出处:https://www.cn ...

  9. 洛谷P4425 [HNOI/AHOI2018]转盘(线段树)

    题意 题目链接 Sol 首先猜一个结论:对于每次询问,枚举一个起点然后不断等到某个点出现时才走到下一个点一定是最优的. 证明不会,考场上拍了3w组没错应该就是对的吧... 首先把数组倍长一下方便枚举起 ...

  10. js发送请求

    1.Chrome控制台中 net::ERR_CONNECTION_REFUSED js频繁发送请求,有可能连接被拒绝,可用setTimeout,过几秒发送,给个缓冲时间 var overlayAnal ...