关于共享内存的几句话
共享内存允许进程通过将公共结构和数据放置在共享内存段中来访问它们。它是可用的最快的进程间通信形式,因为在进程之间传递数据时不会发生内核参与。事实上,进程之间不需要复制数据。
我们注意到红帽机器的价值是巨大的,如下所示
cat /proc/sys/kernel/shmmax
17446744003692774391
sysctl -a | grep kernel.shmmax
kernel.shmmax = 17446744003692774391
当我计算到千兆时 - 16248546544.17632
符合逻辑吗? ,我们是不是错过了什么
机器有64G和16个CPU,用于hadoop集群
答案1
这默认值对于shmmax
是
#define SHMMAX (ULONG_MAX - (1UL << 24))
这是一个上限,选择尽可能大,同时限制溢出风险:
SHMMNI、SHMMAX 和 SHMALL 是默认上限,可以通过 sysctl 修改。 SHMMAX 和 SHMALL 值已选择为尽可能大,而不会促进通过“检索当前限制;添加 X;更新限制”形式的操作调整限制时用户空间导致溢出的情况。因此不建议将 SHMMAX 和 SHMALL 设置得更大。这些限制适用于 32 位和 64 位系统。
其价值原样良好;设置正确,没有错误。