如何定义内核参数的值?

时间:2019-03-30 06:28:06

标签: linux-kernel

我正在尝试在Oracle Linux 7.6计算机上安装Oracle 11g。因此,作为前提条件检查的一部分,如何定义内核参数的值。因为我可以看到最大段大小的意外值。

将在什么基础上将值分配给那些参数。

max seg size (kbytes) = 18014398509465599
max total shared memory (kbytes) = 18014398442373116

我的笔记本电脑RAM大小为8GB。

请帮助我。

谢谢, Chy

[chy@myserver ~]$ ipcs -l

------ Messages Limits --------
max queues system wide = 32000
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 18014398509465599
max total shared memory (kbytes) = 18014398442373116
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 32000
max semaphores per array = 32000
max semaphores system wide = 1024000000
max ops per semop call = 500
semaphore max value = 32767

1 个答案:

答案 0 :(得分:0)

您看到的ipcs -l输出中的数字是这些参数的默认值(未更改),这些值在内核本身中进行了硬编码。

当内核creates the IPC namespace(这些参数是按名称空间定义的)时,它分别由initializes it定义的sets the limits to defaultshere如下:

#define SHMMIN 1                         /* min shared seg size (bytes) */
#define SHMMNI 4096                      /* max num of segs system wide */
#define SHMMAX (ULONG_MAX - (1UL << 24)) /* max shared seg size (bytes) */
#define SHMALL (ULONG_MAX - (1UL << 24)) /* max shm system wide (pages) */
#define SHMSEG SHMMNI                    /* max shared segs per process */

如您所见,这些默认值不取决于RAM的实际大小。关于最大共享段大小的默认值SHMMAX-定义为ULONG_MAX - (1UL << 24)(即仅取决于unsigned long的最大大小),在评估后(在x86_64框上) 18446744073692774399以字节为单位,即18014398509465599以千字节为单位,而这恰好是您在max seg size (kbytes)输出的ipcs -l行中看到的数字。

此值大于您的物理 RAM大小,您不会感到困惑-它全部与虚拟内存有关,该内存远大于物理RAM。