前言
在Linux上安装Oracle时,一般需要调整Linux的内核参数。
Linux安装文档中给出的最小值如下:
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmall = 2097152
kernel.shmmax = 4294967295
kernel.shmmni = 4096
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
net.ipv4.ip_local_port_range = 9000 65500
一、参数介绍
各个参数的含义是什么呢?下面进行简单介绍。
❑ kernel.shmmax
shmmax 是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值,shmmax 设置应该足够大,能在一个共享内存段下容纳下整个的SGA。
设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降 。在实例启动以及Server Process 创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候 需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。这意味着如果你的程序不是经常Create Processes(以及Destroy Them),性能方面就不是考虑的问题。
论坛上的一些说法: SHMMAX 仅仅是在共享内存段被创建的时候用来比较的一个数字,当共享内存段被一个进程(Process)创建,操作系统检查是否被要求的共享内存段的值大于shmmax 的值 ,如果是,那么将会抛出一个错误。这个时候系统会创建另外的一个或多个共享内存段满足进程的需求 。一般来说,共享内存段个数和系统性能没有太直接的关系,也不会对性能产生太大的影响。
官方建议值:
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
kernel.shmall 参数用来控制可以使用的共享内存的总页数。该参数大小为物理内存除以pagesize(Linux共享内存页大小为4KB)。
-- 查看os系统页的大小:
# getconf PAGESIZE
4096
❑ kernel.shmmni
shmmni 参数是共享内存段的最大数量(注意这个参数不是 shmmin,是shmmni, shmmin 表示内存段最小大小 )。
shmmni 缺省值 4096 ,一般肯定是够用了。
❑ fs.file-max
fs.file-max参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量。
fs.file-max为512 乘以 processes。
如128个process,则file-max=512*128=65536。
❑ fs.aio-max-nr
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
net.ipv4.ip_local_port_range参数表示应用程序可使用的IPv4端口范围。
❑ net.core.rmem_default
net.core.rmem_default参数表示套接字接收缓冲区大小的缺省值。
❑ net.core.rmem_max
net.core.rmem_max参数表示套接字接收缓冲区大小的最大值。
❑ net.core.wmem_default
net.core.wmem_default参数表示套接字发送缓冲区大小的缺省值。
❑ net.core.wmem _max
net.core.wmem _max参数表示套接字发送缓冲区大小的最大值。
二、参数配置示例演示
可通过修改文件sysctl.conf 对核心参数进行配置,修改该文件不需要重启OS,只需要命令 /sbin/sysctl -p 就可以让修改的参数即时生效。
(1)查看服务器的物理内存
[root@ruiadg1 ~]# free -m
total used free shared buff/cache available
Mem: 15885 673 240 4774 14971 10107
Swap: 16375 42 16333
(2)查看processes值
SQL> show parameter processes
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 1
db_writer_processes integer 1
gcs_server_processes integer 0
global_txn_processes integer 1
job_queue_processes integer 1000
log_archive_max_processes integer 4
processes integer 300
(3)计算参数值
kernel.shmmax=1588510241024*0.5=8328314880
kernel.shmall = 15885*1024/4=4066560
fs.file-max=512*300=153600
(4)修改参数
#vi /etc/sysctl.conf
添加如下内容:
fs.aio-max-nr = 1048576
fs.file-max = 153600
kernel.sem = 250 32000 100 128
kernel.shmall = 4066560
kernel.shmmax = 8328314880
kernel.shmmni = 4096
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
net.ipv4.ip_local_port_range = 9000 65500
# sysctl -p --使配置生效
fs.aio-max-nr = 1048576
fs.file-max = 153600
kernel.sem = 250 32000 100 128
kernel.shmall = 4066560
kernel.shmmax = 8328314880
kernel.shmmni = 4096
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
net.ipv4.ip_local_port_range = 9000 65500
至此,已完成内核参数的配置。
参考:
https://blog.csdn.net/xujinyang/article/details/6830493
https://www.cnblogs.com/colben/p/4120439.html