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. 模块,import,from xxx import xxx

    一,模块 模块就是一个包含了python定义和声明的文件,文件名就是模块的名字加上.py后缀,总体来说,import加载的模块一共分成四个通用的类别: 1,使用python编写的py文件 2,已被变异 ...

  2. Sharepoint 2010 工作流状态值

    在Sharepoint2010中,如果要使用工作流状态值进行筛选,必须使用内部值,不能使用文字,要不然是筛选不出来的. 进行中:2 已取消:4 已批准:16 拒绝:17 下边是已取消的工作流状态:

  3. 如何对付运行时可能为 null 的 Record Type

    在 F# 中,Record Type 是无法表达 null 语义的,例如,一个 Record 变量不能够使用 null 字面量赋值,接收 nullable(这里并不是指 BCL 中的 Nullable ...

  4. Java高级类特性(二)

    一.static关键字 static关键字用来声明成员属于类,而不是属于类的对象.1). static (类)变量类变量可以被类的所有对象共享,以便与不共享的成员变量区分开来. static变量也称作 ...

  5. 学Java的第17天。呃。。。今天有点奇葩

    神奇的老师在网上看到狗跳楼的视频然后就想到抛物线问题: 还是 属性和方法的调用: package sklx; public class Dog{ private float v = 30.0f; pr ...

  6. cookie和session的区别和用法

    1. 由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以 ...

  7. maven配置之:<distributionManagement>snapshot快照库和release发布库

    在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次.我们知道,maven的依赖管理是基于版本管理的, ...

  8. express koa koa2 优缺点分析

    发布日期 2009年6月26日,TJ 提交 Express 第一次 commit.目前拥有 5000 多次 commit. 2013年8月17日, TJ 只身一人提交 Koa 第一次 commit.目 ...

  9. Jenkins 利用Dashboard View插件管理任务视图

    利用Dashboard View插件管理任务视图   by:授客 QQ:1033553122 步骤 1.  安装Dashboard View插件 说明: 如果无法在线安装,可以选择本地上传方式安装 附 ...

  10. Linux 操作系统下为网卡配置ip

    Linux操作系统下为网卡配置ip by:授客 QQ:1033553122 1.   Linux单一网卡设置多IP的配置方法 在Linux下网卡接口逻辑名被称为eth0,eth1,eth2,..... ...