为方便对系统内核参数调节,现根据官方内核包里的文档做了一些摘译。
系统环境: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
因此一般用它的默认值即可