Linux内核参数及Oracle相关参数调整.doc_第1页
Linux内核参数及Oracle相关参数调整.doc_第2页
Linux内核参数及Oracle相关参数调整.doc_第3页
Linux内核参数及Oracle相关参数调整.doc_第4页
Linux内核参数及Oracle相关参数调整.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

修改内核参数的方法RedHat向管理员提供了非常好的方法,使我们可以在系统运行时更改内核参数,而不需要重新引导系统。这是通过/proc虚拟文件系统实现的。/proc/sys目录下存放着大多数的内核参数,并且设计成可以在系统运行的同时进行更改。更改方法有两种:方法一: 修改/proc/sys目录下的相应文件,比如:/proc/sys/net/ipv4/ip_forward,修改后立刻可用,不用重启系统,但重启系统,会恢复到默认值。方法二: 修改/etc/sysctl.conf 文件,该文件中以 (变量=值)的形式设置内核参数,修改后,不能立刻生效,需要执行 /sbin/sysctl p 命令,使配置文件生效。注意: /etc/sysctl.conf和/proc/sys下的文件其实都对应着一个参数,它们之间的对应关系,有简单规则:将/proc/sys中的文件转换成sysctl中的变量的规则: 1去掉前面部分/proc/sys 2将文件名中的斜杠变为点 这两条规则可以将/proc/sys中的任一文件名转换成sysctl中的变量名。 例如: /proc/sys/net/ipv4/ip_forward net.ipv4.ip_forward /proc/sys/kernel/hostname kernel.hostname 可以使用下面命令查询所有可修改的变量名例子:以打开内核的转发功能。IP转发是指允许系统对来源和目的地都不是本机的数据包通过网络,RedHat默认屏蔽此功能,在需要用本机作为路由器、NAT等情况下需要开启此功能。 方法一:修改/proc下内核参数文件内容 直接修改内核参数ip_forward对应在/proc下的文件/proc/sys/net/ipv4/ip_forward。用下面命令查看ip_forward文件内容: # cat /proc/sys/net/ipv4/ip_forward 该文件默认值0是禁止ip转发,修改为1即开启ip转发功能。修改命令如下: # echo 1 /proc/sys/net/ipv4/ip_forward 修改过后就马上生效,即内核已经打开ip转发功能。但如果系统重启后则又恢复为默认值0,如果想永久打开需要通过修改/etc/sysctl.conf文件的内容来实现。 方法二修改/etc/sysctl.conf文件 默认sysctl.conf文件中有一个变量是 net.ipv4.ip_forward = 0将后面值改为1,然后保存文件。因为每次系统启动时初始化脚本/etc/rc.d/rc.sysinit会读取/etc/sysctl.conf文件的内容,所以修改后每次系统启动时都会开启ip转发功能。但只是修改sysctl文件不会马上生效,如果想使修改马上生效可以执行下面的命令: # sysctl p 内核参数列表可以使用下面命令查询所有可修改的变量名 # sysctl a 一、下面例举几个简单的内核参数: 1/proc/sys/kernel/shmmax 该文件指定内核所允许的最大共享内存段的大小。 2/proc/sys/kernel/threads-max 该文件指定内核所能使用的线程的最大数目。 3/proc/sys/kernel/hostname 该文件允许您配置网络主机名。 4/proc/sys/kernel/domainname 该文件允许您配置网络域名二、常用的设备无关启动时参数 1、init. 设置内核执行的初始化进程名,如果该项没有设置,内核会按顺序尝试/etc/init, /bin/init,/sbin/init,/bin/sh,如果所有的都没找到,内核会抛出kernelpanic:的错误。 2、nfsaddrs=. 设置从网络启动时NFS的启动地址,已字符串的形式给出。 3、nfsroot=. 设置网络启动时的NFS根名字,如果该字符串不是以/、,、.开始,默认指向“/tftp-boot”。 以上2、3在无盘站中很有用处。 4、no387 该选项仅当定义了CONFIG_BUGi386时才能用,某些i387协处理器芯片使用32位的保护模式时会有BUG,比如一些浮点运算,使用这个参数可以让内核忽略387协处理器。 5、no-hlt 该选项仅当定义了CONFIG_BUGi386时才能用,一些早期的i486DX-100芯片在处理“hlt”指令时会有问题,执行该指令后不能可靠的返回操作系统,使用该选项,可以让linux系统在CPU空闲的时候不要挂起CPU。 6、root=. 该参数告诉内核启动时使用哪个设备作为根文件系统。比如可以指定根文件为hda8:root=/dev/hda8。 7、ro和rw ro参数告诉内核以只读方式加载根文件系统,以便进行文件系统完整性检查,比如运行fsck;rw参数告诉内核以读写方式加载根文件系统,这是默认值。 8、reserve=. 保留端口号。格式:reserve=iobase,extent,iobase,extent.,用来保护一定区域的I/O端口不被设备驱动程序自动探测。在某些机器上,自动探测会失败,或者设备探测错误或者不想让内核初始化设备时会用到该参数;比如:reserve=0x300,32device=0x300,除device=0x300外所有设备驱动不探测0x300-0x31f范围的I/O端口。 9、mem=. 限制内核使用的内存数量。早期BIOS设计为只能识别64M以下的内存,如果你的内存数量大于64M,你可以指明,如果你指明的数量超过了实际安装的内存数量,系统崩溃是迟早的事情。如:mem=0x1000000意味着有16M内存,如果是mem=0x6000000,就是96M内存了。 注意:很多机型把部分内存作为BIOS的映射,所以你在指定内存大小的时候一定要预留空间。你也可以在pentium或者更新的CPU上使用mem=nopentium关闭4M的页表,这要在内核配置时申明。 10、panic=N 默认情况,内核崩溃kernelpanic后会宕机而不会重启,你可以设置宕机多少秒之后重启机器;也可以在/proc/sys/kernel/panic文件里设置。 11、reboot=warm|cold,bios|hard 该选项仅当定义了CONFIG_BUGi386时才能用。2.0.22的内核重启默认为coolreboot,warmreboot更快,使用reboot=bios可以继承bios的设置。 12、nosmp和maxcpus=N 仅当定义了_SMP_,该选项才可用。可以用来禁用多CPU或者指明最多支持的CPU个数。三、关于oracle的几个内核参数一般在Linux 上安装设置Oracle 数据库或者在更换或升级硬件的时候都需要配置Linux 系统的核心参数, 然后才是调整Oracle 系统参数 。注意: 以下的一些测试可能只适用于Linux 系统,且测试Linux 系统为64Bit,32Bit Linux 系统可能有不一样 。测试环境: Linux AS 4.0 U5 64Bit核心版本: 2.6.9-55.ELsmp #1 SMP x86_641. Linux 系统下的核心参数:rootECSDB etc# cat sysctl.conf 或者到 /proc/sys/kernel 下查看。kernel.shmall = 2097152 kernel.shmmax = 2147483648 kernel.shmmni = 4096 # semaphores: semmsl, semmns, semopm, semmni kernel.sem = 250 32000 100 128 fs.file-max = 65536 net.ipv4.ip_local_port_range = 1024 65000 net.core.rmem_default=262144 net.core.rmem_max=262144 net.core.wmem_default=262144 net.core.wmem_max=262144* 修改 /etc/sysctl.conf 文件之后立刻生效命令 # /sbin/sysctl p2参数说明(1)shmmax:该参数定义了共享内存段的最大尺寸(以字节为单位)。缺省为32M,对于oracle来说,该缺省值太低了,通常将其设置为2G。要大于sga-max-size(2)shmmni:这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是4096。通常不需要更改。(3)shmall:该参数表示系统一次可以使用的共享内存总量(以页为单位)。缺省值就是2097152,通常不需要修改。(4)sem:该参数表示设置的信号量。(5)file-max:该参数表示文件句柄的最大数量。文件句柄设置表示在linux系统中可以打开的文件数量。# semaphores: semmsl, semmns, semopm, semmni kernel.sem = 250 32000 100 128 250 是参数SEMMSL的值(每个用户拥有信号量最大数),32000是参数SEMMNS的值(系统信号量最大数), 32是参数SEMOPM的值(每次semopm系统调用操作数),128则是参数SEMMNI的值(系统辛苦量集数最大数)用以下的命令可以对上述参数进行修改echo SEMMSL_value SEMMNS_value SEMOPM_value SEMMNI_value semecho e “250 32000 100 128” /proc/sys/kernel/sem其中SEMMSL_value、SEMMNS_value、SEMOPM_value、SEMMNI_value分别用相应的值进行替换,并且这些值的顺序不能调换2. 参数调整 kernel.shmmaxSHMMAX Available physical memory Defines the maximum allowable sizeof one shared memory segment. The SHMMAX setting should be large enoughto hold the entire SGA in one shared memory segment. A low setting cancause creation of multiple shared memory segments which may lead toperformance degradation.Shmmax 是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值,shmmax 设置应该足够大,能在一个共享内存段下容纳下整个的SGA ,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降 。Steve Adams 在他的小册子中说过,在实例启动以及Server Process 创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候 需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。这意味着如果你的程序不是经常Create Processes(以及Destroy Them),性能方面就不是考虑的问题。当然Oralce 的建议是希望一个大的共享内存段能容纳整个SGA,这样在任何时候都不会有甚至轻微的性能下降的隐患。Oracle 安装文档建议 32Bit Linux 系统设置shmmax 为32Bit 最大的限制值(setting shmmax to the 32-bit number limit),也就是4G 。 所以一般来说,1-4G 的物理内存,可以直接设置shmmax 为最大物理内存即可,那么SGA 肯定在一个共享内存段中,32Bit Linux 系统物理内存大于4G 的设置为4G 即可 。总之,一般设置shmmax =SGA (32Bit 系统是否支持到1.7G 以上SGA 需要注意) 。如果是64Bit 的Linux 操作系统,shmmax 设置为大于SGA_MAX_SIZE 即可。(仅供参考) 设置共享内存大小,共享内存大小一般设为物理内存的一半,在这里我们假设物理内存256M则共享内存为134217728,(算法:256/2=shmmaxk*1024=shmmaxk(k)*1024=shmmaxk(byte))echo 134217728 /proc/sys/kernel/shmmaxipcs -sa 可以看到共享内存段个数kernel.shmallkernel.shmall 参数是控制共享内存页数 。Linux 共享内存页大小为4KB, 共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是16G,那么需要共享内存页数是 16GB/4KB=16777216KB/4KB=4194304 (页),也就是64Bit 系统下16GB 物理内存,设置 kernel.shmall = 4194304 才符合要求(几乎是原来设置2097152的两倍)。这时可以将shmmax 参数调整到 16G 了,同时可以修改SGA_MAX_SIZE 和SGA_TARGET 为 12G(您想设置的SGA 最大大小,当然也可以是2G14G 等,还要协调PGA参数及OS 等其他内存使用,不能设置太满,比如16G)。kernel.shmmnishmmni 内核参数是共享内存段的最大数量(注意这个参数不是 shmmin,是shmmni, shmmin 表示内存段最小大小 ) 。shmmni 缺省值 4096 ,一般肯定是够用了 三、与磁盘IO子系统有关1、编辑 /proc/sys/vm/dirty_ratio: 控制文件系统的写缓冲区的大小,单位是百分比,表示系统内存的百分比,表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数据 。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能 。但是,当你需要持续、恒定的写入场合时,应该降低其数值,一般启动上缺省是10。下面是增大的方法:echo 40 /proc/sys/vm/dirty_ratio 2、编辑 /proc/sys/vm/dirty_background_ratio:控文件系统的pdflush进程,在何时刷新磁盘。单位是百分比,表示系统内存的百分比,意思是当写缓冲使用到系统内存多少的时候,pdflush开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,一般启动上缺省是 5。下面是增大的方法:echo 20 /proc/sys/vm/dirty_background_ratio3编辑 /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_centisecs4、编辑 /proc/sys/vm/dirty_expire_centisecs :声明Linux内核写缓冲区里面的数据多“旧”了之后,pdflush 进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是30000,也就是 30秒的数据就算旧了,将会刷新磁盘。对于特别重载的写操作来说,这个值适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提高太快。建议设置为1500,也就是15秒算旧。echo 1500 /proc/sys/vm/dirty_expire_centisecs当然,如果你的系统内存比较大,并且写入模式是间歇式的,并且每次写入的数据不大(比如几十M),那么这个值还是大些的好。四、与网络有关的参数设置5、编辑 /proc/sys/net/ipv4/tcp_retrans_collapse : 控制TCP双方Window协商出现错误的时候的一些重传的行为。但是在老的2.6的核( /proc/sys/net/ipv4/tcp_retrans_collapse6、编辑 提高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) /* how long to wait to destroy TIME-WAITstate, about 60 seconds*/而这个宏是真正控制 TCPTIME_WAIT 状态的超时时间的。如果我们希望减少 TIME_WAIT 状态的数目(从而节省一点点内核操作时间),那么可以把这个数值设置低一些,根据我们的测试,设置为 10 秒比较合适,也就是把上面的修改为:#define TCP_TIMEWAIT_LEN (10*HZ) /* how long to wait to destroy TIME-WAIT* state, about 60 seconds*/然后重新编译 内核,重启系统即可发现短连接造成的TIME_WAIT状态大大减少:netstat -ant | grep -i time_wait |wc -l一般情况都可以至少减少2/3。也能相应提高系统应对短连接的速度。7、编辑 /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(0x1111)意味着四个 CPU 都会参与中断处理。几乎所有外设都有这个参数设置,可以关注一下。这个数值的推荐设置,其实在很大程度上,让专门的CPU处理专门的中断是效率最高的,比如,给磁盘IO一个CPU,给网卡一个CPU,这样是比较合理的。3. Oracle 下需要做调整的参数SGA_MAX_SIZESGA_TARGETDB_CACHE_SIZESGA_MAX_SZIE 为实例允许使用的sga 上限,一个静态参数,是不能动态修改的.SGA_TARGET 为10g 推出的sga 自动管理的参数,动态参数,可以动态修改.sga_max_size 与 SGA 各组件大小的关系设置的 sga_max_size 小于实际的SGA 中各个pool 的尺寸总和的大小,那么sga_max_size 的值会被oracle 自动以实际的SGA 的总尺寸代替。如果不设置sga_max_size ,oracle 会自动的以实际的SGA 的总尺寸来设置sga_max_size 的值。设置 sga_max_size 的值为大于SGA 中各个pool 的尺寸总和的值:但是sga_max_size 的值相对于所有可用的物理内存来说,是一个合理的值。sga_max_size的实际的值和pfile 中的sga_max_size 指定的值是一样的。 在Oracle 10g 中引入了一个非常重要的参数:SGA_TARGET,这也是Oracle 10g的一个新特性。自动共享内存管理(Automatic Shared Memory Management ASMM),控制这一特性的,就仅仅是这个参数SGA_TARGE。设置这个参数后,你就不需要为每个内存区来指定大小了。SGA_TARGET 指定了SGA 可以使用的最大

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论