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. SpringBoot入门之基于XML的Mybatis

    上一博客介绍了下SpringBoot基于注解引入Mybatis,今天介绍基于XML引入Mybatis.还是在上一篇demo的基础上进行修改. 一.Maven引入 这个与上一篇的一样,需要引入mybat ...

  2. Apollo 4 客户端 SDK 设计

    前言 之前聊了客户端的一些功能,例如融入 Spring, @value 注解的自动刷新实现,长轮询等,这次从客户端的整体设计来聊聊. 设计 上图是 client 项目的包结构. 其中,核心包就是 in ...

  3. SQL Server 中的 NOLOCK 到底是什么意思?

    以前遇到过,但仅限于听同事说加上NOLOCK好一些,今天仔细研究测试了下,终于理解了,那么加与不加到底区别在哪呢? 我先说下其区别,之后再做测试. 大家都知道,每新建一个查询,都相当于创建一个会话,在 ...

  4. Thymeleaf学习记录(1)--启动模板及建立Demo

    Thymeleaf是什么? Thymeleaf是适用于Web和独立环境的现代服务器端Java模板引擎.相比于JSP,Thymeleaf更简洁,渲染性能更好,维护性更好,它可以XML/XHTML/HTM ...

  5. CSS3景深-perspective

    3D视图正方体: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  6. web全栈架构师[笔记] — 02 数据交互

    数据交互 一.http协议 基本特点 1.无状态的协议 2.连接过程:发送连接请求.响应接受.发送请求 3.消息分两块:头.体 http和https 二.form 基本属性 action——提交到哪儿 ...

  7. VUE组件 之 Toast (Vue.extend 方式)

    一.效果图 二.说明 这类提示框组件我们通常都会直接在 JS 代码中进行调用.像下面这样: this.$toast('别点啦,到头啦!') 但看到网上大多数还是通过 component  方式实现的, ...

  8. 【转】对cocos2d 之autorelease\ratain\release的理解

    原文链接:http://blog.sina.com.cn/s/blog_4057ab6201018y4y.html Objective C内存管理进阶(二):理解autorelease: http:/ ...

  9. Android解析XML文件

    XML文件和获取XML值 XML文件样例 <?xml version="1.0" encoding="utf-8"?> <citys> ...

  10. 微信小程序-01-项目组成文件介绍(入门篇)

    自古开篇先说两句,写这些笔记不是学习用的,主要是后续分享一些遇到的坑,碰到过什么样的问题,怎么去解决,如果你不是一个很耐心无看文章的人,建议去 网易云课堂找一些课程,跟着别人的脚步或许会更有动力,我的 ...