您的位置:首页 > 运维架构 > Linux

Linux系统优化(2)---sysctl设置内核参数之VM

2011-05-03 15:58 281 查看
为方便对系统内核参数调节,现根据官方内核包里的文档做了一些摘译。

系统环境:CentOS 5.5 X86

可以使用下面的方法下载内核包:

cd /usr/src/

wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.8.tar.bz2

tar xvfj linux-2.6.18.8.tar.bz2

mv linux-2.6.18.8 linux

cd /usr/src/linux/Documentation/

使用find命令查找sysctl目录及文件:

cd /usr/src/linux/Documentation/

find . -name "*sysctl*"





可以看到有一个目录和两个文件。进入到sysctl目录。

cd /usr/src/linux/Documentation/sysctl/

可以看到有以下几个文件:





这里主要记录一些关于VM调整的一些参数。

可以打开vm.txt文件,看看里面写了些什么,很多重要参数说明都在这里解释着呢。

more vm.txt





关于vm的这些参数文件都在/proc/sys/vim/目录,可以看下,这个目录下有些什么文件:

cd /proc/sys/vm ; ls





看看这些文件都在vm.txt里有具体的说明。

上图中的一些参数的解释并不在vm.txt,而在proc.txt文件,proc.txt的路径/usr/src/linux/Documentation/filesystems/proc.txt:

dirty_ratio, dirty_background_ratio, dirty_expire_centisecs,dirty_writeback_centisecs, vfs_cache_pressure, laptop_mode,block_dump, swap_token_timeout, drop-caches

好了,说一堆没用的,下面跟着vm.txt文件,说一些比较重要的参数吧:

可以执行命令,如下图示:

sysctl -a|grep “^vm.*”





这些参数对应的文件路径都在这个目录下:/proc/sys/vm/

修改sysctl里的参数值等于修改/proc/sys/vm/目录下的文件值。以下介绍几个重要的参数:

(1)vm.overcommit_memory

默认值为:0

从内核文档里得知,该参数有三个值,分别是:

0:当用户空间请求更多的的内存时,内核尝试估算出剩余可用的内存。

1:当设这个参数值为1时,内核允许超量使用内存直到用完为止,主要用于科学计算

2:当设这个参数值为2时,内核会使用一个决不过量使用内存的算法,即系统整个内存地址空间不能超过swap+50%的RAM值,50%参数的设定是在overcommit_ratio中设定。

(2)vm.overcommit_ratio

默认值为:50

这个参数值只有在vm.overcommit_memory=2的情况下,这个参数才会生效。

(3)vm.page-cluster

默认值为:3

这个参数用来控制VM的虚拟内存的,读取大量的page,同时发生page错误时,linux VM子系统为了避免过多的磁盘寻址。读取大量的page依赖于系统的内存。内核 一次读取page的数量等于2的page-cluster值的次方即2^page-cluster。当设的值超过2的5次方即2^5,它不会被swap所检测到。因为swap的数据page最大为2的5次方即32-page。

(4)vm.min_free_kbytes

默认值 :3519

这个参数值用来强制linux虚拟内存保留最小值的空闲。

(5)vm.drop_caches

默认值 :0

设置这个参数的值会让内核清理内存中的caches、denties、inodes,从而释放更多的内存。

有三个值可以设置,每设一个值都会引发内核释放不同的内容:

1:释放pagecache

2:释放denties、inodes

3:释放pagecache、denties、inodes

由于这是一个非破坏性操作而且脏对象不会被释放,因此应当先执行”sync“后再设置这个参数。

(6)vm.dirty_writeback_centisecs

默认值:499

这个参数会触发pdflush回写进程定期唤醒并将old数据写到磁盘。每次的唤醒的间隔,是以数字100算做1秒。

如果将这项值设为500就相当5秒唤醒pdflush进程。

如果将这项值设为0就表示完全禁止定期回写数据。

(7)vm.dirty_ratio

默认值:40

参数意义:控制一个在产生磁盘写操作的进程开始写出脏数据到内存缓冲区。缓冲区的值大小是系统内存的百分比。增大会使用更多系统内存用于磁盘写缓冲,可以提高系统的写性能。当需要持续、恒定的写入场合时,应该降低该数值。

(8)vm.dirty_expire_centisecs

默认值:2999

参数意义:用来指定内存中数据是多长时间才算脏(dirty)数据。指定的值是按100算做一秒计算。只有当超过这个值后,才会触发内核进程pdflush将dirty数据写到磁盘。

(9)vm.dirty_background_ratio

默认值 :10

参数意义:控制pdflush后台回写进程开始写出脏数据到系统内存缓冲区。缓冲区的值大小是系统内存的百分比。增大会使用更多系统内存用于磁盘写缓冲,可以提高系统的写性能。当需要持续、恒定的写入场合时,应该降低该数值。

(10)vm.vfs_cache_pressure

默认值:100

参数意义:控制内核回收再利用用于缓存目录与inode对象的内存的趁势。

默认值设为100表示内核以平等的速度去考虑pagecache和swapcache的回收再利用。

减小它,会触发内核保持目录与inodes的缓存内存。

增大它,会触发内核回收再利用目录与inodes的缓存内存。

(11)vm.panic_on_oom

默认值 :0

参数意义:当超出内存时,是否开启内核崩溃特性。

当设为1时,表示当发生超出内存时,内核会panic

当设为0时,表示当发生超出内存时,内核会kill掉一些空闲进程从而不让系统内核崩溃而继续运行,通常也称它为oom_killer

因此一般用它的默认值即可
本文出自 “宁静致远” 博客,请务必保留此出处http://skyou.blog.51cto.com/2915693/558461
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: