转载地址: http://blog.ops88.com/2012/07/12/74node
一. /proc/sys/vm/dirty_background_ratiolinux
该参数是在尝试一个write back 操做以前所持有的脏内存比例。在Linux内核中api
,pdflush内核线程池负责VM的回写操做。并周期性同步文件系统给的元数据。若缓存
超出了这个后台回写百分比,则pdflush守护进程异步处理回写操做。网络
在CentOS5.5下,这个参数是异步
10socket
二. /proc/sys/vm/dirty_expire_centisecstcp
该参数是数据能够保持为dirty状态的最大厘秒数。这个时间段经过查询全部在内存中缓存了脏页面的文件的时间戳来肯定。该参数表示一个上限值,确保最终能够将数据写入到磁盘子系统。厘秒表示oop
1/100s的时间单位性能
在CentOS5.5下,这个参数是
2999
三. /proc/sys/vm/dirty_ratio
该参数是过量脏内存的比例。当一个任务(或者某一个进程)在脏内存过多的环境中执行文件写操做时,若是(关于这个进程的)脏内存页面占用总内存的百分比高于dirty_ratio这个值,那么系统就执行脏
内存页面的写出操做,直至脏内存页面的百分比低于系统规定的阈值。I/O操做具备很高的延迟。因此这个参数很重要。
在CentOS5.5中,这个参数是
40
四. /proc/sys/vm/dirty_writeback_centisecs
该参数是 pdflush 内核线程执行回写操做之间的时间间隔(厘秒为单位)。也就是pdflush 内核线程执行的频率。该参数的设置应该小于dirty_expire_centisecs,但也不能过小,过小I/O太频繁,反而
使系统性能降低。具体可能须要在生产环境上测试。听说1:6 (dirty_expire_centisecs : dirty_writeback_centisecs )的比例比较好。
在CentOS5.5中,这个参数是499
五.总结
1.经过这四个参数,能够控制脏数据在内存中占用多大比例写入磁盘文件系统;
2.脏数据在内存中最多能够存在多长时间,超过这个时间就写入磁盘;
3.单个任务在内存中的脏数据所占内存比例多大则写入磁盘;
4.pdflush内核线程执行的频率。
与磁盘IO子系统有关的如下方法重启失效
/proc/sys/vm/dirty_ratio
这个参数控制文件系统的文件系统写缓冲区的大小,单位是百分比,表示系统内存的百分比,表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数据。增大 之会使用更多系统内存用于磁盘写缓冲,也能够极大提升系统的写性能。可是,当你须要持续、恒定的写入场合时,应该下降其数值,通常启动上缺省是 10。下面是增大的方法:
echo ’40′ > /proc/sys/vm/dirty_ratio /proc/sys/vm/dirty_background_ratio
这个参数控制文件系统的pdflush进程,在什么时候刷新磁盘。单位是百分比,表示系统内存的百分比,意思是当写缓冲使用到系统内存多少的时 候,pdflush开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也能够极大提升系统的写性能。可是,当你须要持续、恒定的写入场合时, 应该下降其数值,通常启动上缺省是 5。下面是增大的方法:
echo ’20′ > /proc/sys/vm/dirty_background_ratio /proc/sys/vm/dirty_writeback_centisecs
这个参数控制内核的脏数据刷新进程pdflush的运行间隔。单位是 1/100 秒。缺省数值是500,也就是 5 秒。若是你的系统是持续地写入动做,那么实际上仍是下降这个数值比较好,这样能够把尖峰的写操做削平成屡次写操做。设置方法以下:
echo “200″ > /proc/sys/vm/dirty_writeback_centisecs
若是你的系统是短时间地尖峰式的写操做,而且写入数据不大(几十M/次)且内存有比较多富裕,那么应该增大此数值:
echo “1000″ > /proc/sys/vm/dirty_writeback_centisecs /proc/sys/vm/dirty_expire_centisecs
这个参数声明Linux内核写缓冲区里面的数据多“旧”了以后,pdflush进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是 30000,也就是 30 秒的数据就算旧了,将会刷新磁盘。对于特别重载的写操做来讲,这个值适当缩小也是好的,但也不能缩小太多,由于缩小太多也会致使IO提升太快。建议设置为 1500,也就是15秒算旧。
echo “1500″ > /proc/sys/vm/dirty_expire_centisecs
固然,若是你的系统内存比较大,而且写入模式是间歇式的,而且每次写入的数据不大(好比几十M),那么这个值仍是大些的好。
与网络IO子系统有关的 /proc/sys/net/ipv4/tcp_retrans_collapse
这个参数控制TCP双方Window协商出现错误的时候的一些重传的行为。可是在老的2.6的核 (<2.6.18)里头,这个重传会致使kernel oops,kernel panic,因此,若是出现有 tcp_retrans_*样子的kernel panic,能够把这个参数给设置成0:
echo ’0′ > /proc/sys/net/ipv4/tcp_retrans_collapse 提升Linux应对短链接的负载能力
在存在大量短链接的状况下,Linux的TCP栈通常都会生成大量的 TIME_WAIT 状态的socket。你能够用下面的命令看到:
netstat -ant| grep -i time_wait
有时候,这个数目是惊人的:
netstat -ant|grep -i time_wait |wc -l
可能会超过三四万。这个时候,咱们须要修改 linux kernel 的 tcp time wait的时间,缩短之,有个 sysctl 参数貌似可使用,它是 /proc/sys/net/ipv4/tcp_fin_timeout,缺省值是 60,也就是60秒,不少网上的资料都说将这个数值设置低一些就能够减小netstat 里面的TIME_WAIT状态,可是这个说法是错误的。通过认真阅读Linux的内核源代码,咱们发现这个数值实际上是输出用的,修改以后并无真正的读回内核中进行使用,而内核中真正管用的是一个宏定义,在 $KERNEL/include/net/tcp.h里面,有下面的行:
#define TCP_TIMEWAIT_LEN (60*HZ)
而这个宏是真正控制 TCP TIME_WAIT 状态的超时时间的。若是咱们但愿减小 TIME_WAIT 状态的数目(从而节省一点点内核操做时间),那么能够把这个数值设置低一些,根据咱们的测试,设置为 10 秒比较合适,也就是把上面的修改成:
#define TCP_TIMEWAIT_LEN (10*HZ)
而后从新编译内核,重启系统便可发现短链接形成的TIME_WAIT状态大大减小:
netstat -ant | grep -i time_wait |wc -l
通常状况均可以致少减小2/3。也能相应提升系统应对短链接的速度。
/proc/irq/{number}/smp_affinity
在多 CPU 的环境中,还有一个中断平衡的问题,好比,网卡中断会教给哪一个 CPU 处理,这个参数控制哪些 CPU 能够绑定 IRQ 中断。其中的 {number} 是对应设备的中断编号,能够用下面的命令找出:
cat /proc/interrupt
好比,通常 eth0 的 IRQ 编号是 16,因此控制 eth0 中断绑定的 /proc 文件名是 /proc/irq/16/smp_affinity。上面这个命令还能够看到某些中断对应的CPU处理的次数,缺省的时候确定是不平衡的。
设置其值的方法很简单,smp_affinity 自身是一个位掩码(bitmask),特定的位对应特定的 CPU,这样,01 就意味着只有第一个 CPU 能够处理对应的中断,而 0f(0×1111)意味着四个 CPU 都会参与中断处理。
几乎全部外设都有这个参数设置,能够关注一下。
这个数值的推荐设置,其实在很大程度上,让专门的CPU处理专门的中断是效率最高的,好比,给磁盘IO一个CPU,给网卡一个CPU,这样是比较合理的。
============================================
补充:
/proc/sys/vm/优化
1) /proc/sys/vm/block_dump
该文件表示是否打开Block Debug模式,用于记录全部的读写及Dirty Block写回动做。
缺省设置:0,禁用Block Debug模式
2) /proc/sys/vm/dirty_background_ratio
该文件表示脏数据到达系统总体内存的百分比,此时触发pdflush进程把脏数据写回磁盘。
缺省设置:10
3) /proc/sys/vm/dirty_expire_centisecs
该文件表示若是脏数据在内存中驻留时间超过该值,pdflush进程在下一次将把这些数据写回磁盘。
缺省设置:3000(1/100秒)
4) /proc/sys/vm/dirty_ratio
该文件表示若是进程产生的脏数据到达系统总体内存的百分比,此时进程自行把脏数据写回磁盘。
缺省设置:40
5) /proc/sys/vm/dirty_writeback_centisecs
该文件表示pdflush进程周期性间隔多久把脏数据写回磁盘。
缺省设置:500(1/100秒)
6) /proc/sys/vm/vfs_cache_pressure
该 文件表示内核回收用于directory和inode cache内存的倾向;缺省值100表示内核将根据pagecache和swapcache,把directory和inode cache保持在一个合理的百分比;下降该值低于100,将致使内核倾向于保留directory和inode cache;增长该值超过100,将致使内核倾向于回收directory和inode cache。
缺省设置:100
7) /proc/sys/vm/min_free_kbytes
该文件表示强制Linux VM最低保留多少空闲内存(Kbytes)。
缺省设置:724(512M物理内存)
8) /proc/sys/vm/nr_pdflush_threads
该文件表示当前正在运行的pdflush进程数量,在I/O负载高的状况下,内核会自动增长更多的pdflush进程。
缺省设置:2(只读)
9) /proc/sys/vm/overcommit_memory
该文件指定了内核针对内存分配的策略,其值能够是0、一、2。
0,表示内核将检查是否有足够的可用内存供应用进程使用;若是有足够的可用内存,内存申请容许;不然,内存申请失败,并把错误返回给应用进程。
1,表示内核容许分配全部的物理内存,而无论当前的内存状态如何。
2,表示内核容许分配超过全部物理内存和交换空间总和的内存(参照overcommit_ratio)。
缺省设置:0
10) /proc/sys/vm/overcommit_ratio
该文件表示,若是overcommit_memory=2,能够过载内存的百分比,经过如下公式来计算系统总体可用内存。
系统可分配内存=交换空间+物理内存*overcommit_ratio/100
缺省设置:50(%)
11) /proc/sys/vm/page-cluster
该文件表示在写一次到swap区的时候写入的页面数量,0表示1页,1表示2页,2表示4页。
缺省设置:3(2的3次方,8页)
12) /proc/sys/vm/swapiness
该文件表示系统进行交换行为的程度,数值(0-100)越高,越可能发生磁盘交换。
缺省设置:60
13) legacy_va_layout
该文件表示是否使用最新的32位共享内存mmap()系统调用,Linux支持的共享内存分配方式包括mmap(),Posix,System VIPC。
0,使用最新32位mmap()系统调用。
1,使用2.4内核提供的系统调用。
缺省设置:014) nr_hugepages该文件表示系统保留的hugetlb页数。15) hugetlb_shm_group该文件表示容许使用hugetlb页建立System VIPC共享内存段的系统组ID。