在之前的日志中,关于Linux内核参数的调整我不太明了。
故,用一个篇章的日志详细的描述下这方面的细节。

——————————————————————————————————
Linux内核参数的调整主要修改的配置文件是:/etc/sysctl.conf
查看系统当前的内核参数的配置的命令是:sysctl -a | grep xxx,xxx为你希望针对性查看的内核参数。比如你想查看“shmall”的当前设定:sysctl -a | grep shmall。
希望对配置文件的修改立即作用到当前运行的系统,使用命令:sysctl -p。

一、kernel.shmmax:
含义:Linux进程,可以被分配到的单独共享内存段的最大值。
一般说来,该值会设为内存总大小的一半(内存总大小为:物理内存,或者说是Linux可识别的总共内存)

对于Oracle而言:
如果Instance的内存管理方式是AMM,那么Linux的该内核参数的效用,要大于实例的Memory_max_target参数设定的值。
如果内存的管理方式是ASMM,那么Linux的内核参数需要大于SGA_MAX_TARGET的设定。

单位:Byte,字节
计算方式(如何取值):
X GB = X * (1024*1024*1024)
比方说,你打算将shmmax设为10 GB,那么你需要这么做:
10 GB = 10 * (1024*1024*1024) = 10737418240
所以,最后是:kernel.shmmax = 10737418240

二、kernel.shmall:
含义:共享内存页的总数。

对于Oracle而言,该值如果小于SGA的大小,将导致Oracle在内存中构建SGA区失败,从而导致数据库实例启动时的报错。

单位:无单位,仅用作数量的计数,没有表示大小的单位属性(B,KB,MB,GB)
该参数通常是与单一内存页(分页)大小相乘后才具有单位属性的。
单一内存页(分页)的大小是恒值,获取方法:getconf PAGE_SIZE,单位:Byte(字节)。
如下:

如上所示,当前的单一内存页的大小是:4096 Byte = 4096 Byte / 1024 = 4 KB
故而shmall的值的设定如下:
X GB = X * (1024*1024) / 4

所以,如果你打算让shmall最终的效用是10 GB,那么你应该这么设置:
10 GB = 10 * (1024*1024) / 4 = 2621440
所以,最后是:kernel.shmall = 2621440

要确定shmall的设定是否真的作用了,可以通过如下两种方式确定:
sysctl -a:

如上所示:
2097152 * 4 / 1024 / 1024 = 8 GB

ipcs -l:

如上所示:
max total shared memory (kbytes) = 8388608(SHMALL)
故而:
8388608 / 1024 / 1024 = 8 GB

三、kernel.shmmni:
含义:Linux共享内存的内存段的最大数量。

四、kernel.shmmin:
含义:Linux共享内存的内存段的最小数量。

——————————————————————————————
To be Continue。

1 thought on “Linux:内核参数的设置”

  1. 要更努力,… 如上这样的问题,在网上找资料的时候,很多人8年前就玩的不要了,我到现在还有这种问题,可见自己的努力多么不够。要更努力才可以。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

隐藏
变装