在安装Oracle的时候需要调整linux的内核参数,但是各参数代表什么含义呢,下面做详细解析。

Linux安装文档中给出的最小值:

fs.aio-max-nr = 1048576

fs.file-max = 6815744

kernel.shmall = 2097152/4294967296

kernel.shmmax = 4294967295/68719476736

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 9000 65500

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_default = 8388608

net.core.wmem_max = 16777216

各参数详解:

kernel.shmmax:

是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值。设置应该足够大,能在一个共享内存段下容纳下整个的SGA ,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降。至于导致系统下降的主要原因为在实例启动以及ServerProcess创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。

官方建议值:

32位linux系统:可取最大值为4GB(4294967296bytes)-1byte,即4294967295。建议值为多于内存的一半,所以如果是32为系统,一般可取值为4294967295。32位系统对SGA大小有限制,所以SGA肯定可以包含在单个共享内存段中。

64位linux系统:可取的最大值为物理内存值-1byte,建议值为多于物理内存的一半,一般取值大于SGA_MAX_SIZE即可,可以取物理内存-1byte。例如,如果为12GB物理内存,可取12*1024*1024*1024-1=12884901887,SGA肯定会包含在单个共享内存段中。

kernel.shmall:

该参数控制可以使用的共享内存的总页数。Linux共享内存页大小为4KB,共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是16G,那么需要共享内存页数是16GB/4KB=16777216KB /4KB=4194304(页),也就是64Bit系统下16GB物理内存,设置kernel.shmall = 4194304才符合要求(几乎是原来设置2097152的两倍)。这时可以将shmmax参数调整到16G了,同时可以修改SGA_MAX_SIZE和SGA_TARGET为12G(您想设置的SGA最大大小,当然也可以是2G~14G等,还要协调PGA参数及OS等其他内存使用,不能设置太满,比如16G)

kernel.shmmni:

该参数是共享内存段的最大数量。shmmni缺省值4096,一般肯定是够用了。

fs.file-max:

该参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量。

fs.aio-max-nr:

此参数限制并发未完成的请求,应该设置避免I/O子系统故障。

kernel.sem:

以kernel.sem = 250 32000 100 128为例:

250是参数semmsl的值,表示一个信号量集合中能够包含的信号量最大数目。

32000是参数semmns的值,表示系统内可允许的信号量最大数目。

100是参数semopm的值,表示单个semopm()调用在一个信号量集合上可以执行的操作数量。

128是参数semmni的值,表示系统信号量集合总数。

net.ipv4.ip_local_port_range:

表示应用程序可使用的IPv4端口范围。

net.core.rmem_default:

表示套接字接收缓冲区大小的缺省值。

net.core.rmem_max:

表示套接字接收缓冲区大小的最大值。

net.core.wmem_default:

表示套接字发送缓冲区大小的缺省值。

net.core.wmem_max:

表示套接字发送缓冲区大小的最大值。

以下命令使内核参数生效:/sbin/sysctl -p 生效

/sbin/sysctl -a | grep net.core.netdev_max_backlog 查看

如果出现error: "net.ipv4.netfilter.ip_conntrack_max" is an unknown key

执行下面的命令加载对应模块:

modprobe ip_conntrack

lsmod |grep conn -- if you see entries it means modules have been loaded correctly

sysctl -w -- to write the changes you made under /etc/sysctl.conf

sysctl -p -- to view the changes and see if it was actually loaded.

还不行,把net.ipv4.netfilter.ip_conntrack_max替换为:

net.nf_conntrack_max = 131070试试看

除了调整内核参数,还需 调整文件数:

linux系统优化完网络必须调高系统允许打开的文件数才能支持大的并发,默认1024是远远不够的。查看进程占用的文件句柄数; lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more       其中第一行是打开的文件句柄数量,第二行是进程号执行Shell命令:echo ulimit -HSn 65536 >> /etc/rc.localecho ulimit -HSn 65536 >>/root/.bash_profile

ulimit -HSn 65536

如果要sudo执行时,使用:sudo sh -c "ulimit -HSn 65536 && exec su $LOGNAME"

-H 设置硬资源限制.

-S 设置软资源限制.

-a 显示当前所有的资源限制.

-c size:设置core文件的最大值.单位:blocks

-d size:设置数据段的最大值.单位:kbytes

-f size:设置创建文件的最大值.单位:blocks

-l size:设置在内存中锁定进程的最大值.单位:kbytes

-m size:设置可以使用的常驻内存的最大值.单位:kbytes

-n size:设置内核可以同时打开的文件描述符的最大值.单位:n

-p size:设置管道缓冲区的最大值.单位:kbytes

-s size:设置堆栈的最大值.单位:kbytes

-t size:设置CPU使用时间的最大上限.单位:seconds

-v size:设置虚拟内存的最大值.单位:kbytes

-u  用户最多可开启的程序数目

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐