/proc/sys/kernel/shmmax 的默认最大值是多少

/proc/sys/kernel/shmmax 的默认最大值是多少

我对 shmmax 中的最大值应该设置多少感到困惑。

查看了我的系统统计数据后,它显示以下内容:

#cat /proc/sys/kernel/shmmax 
18446744073692774399

#ipcs -l

------ Messages Limits --------
max queues system wide = 3675
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 = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767

理想情况下,共享内存的值不应超过实际 RAM 大小(即 21474836480 字节)。那么这可能吗?或者这是一个垃圾值。

答案1

您显示的值:18446744073692774399

对应于:0xFFFFFFFFFEFFFFFF

或 1111 1111 1111 1111 1111 1111 1111 1111 63 47 1111 1110 1111 1111 1111 1111 1111 1111 31 15

所以它不完全是 64 位无符号整数的最大值,但差不多。

答案2

默认值设置为 64 位系统上的最大可能无符号长整型 (2^64) = 18446744073709551616(我猜测减去一些必要的内存空间)。

如果最大共享 RAM 值 > 实际 RAM,则意味着所有可用 RAM 都可以共享。您可以随时降低它,但默认情况下它是(接近)全部。

他们将 1 个无符号长整型数位移位 24(1UL << 24)= 16777216,然后从理论最大值中减去该值,得到结果。

18446744073709551616-16777217=18446744073692774399

答案3

我在谷歌上搜索你的问题,只找到了关于如何配置shmmaxshmall参数的文档。最好的一个是在这个答案。所以对于您的问题,如果您shmmax将其设置为更高的值,超过您拥有的 RAM,那么它就是垃圾值,系统不允许将超过您拥有的 RAM 用于共享内存(不知道交换)。

相关内容