在不同的 Linux/Unix 版本上运行 GridGain 节点时,我得到Failed to allocate shared memory 段错误。
如何解决?
在 Linux 或 Mac OS 上的同一台机器上启动的 GridGain 节点将尝试使用高吞吐量共享内存协议而不是 TCP 来相互连接。但是,Mac OS 中系统资源的默认限制极低,无法在同一机器上的多个节点之间使用共享内存 IPC 通信。要增加共享内存限制,请在终端中运行以下命令:
ulimit -n 4096
launchctl limit maxfiles 100000 100000
sudo sysctl -w kern.sysv.shmmax=33554432
sudo sysctl -w kern.sysv.shmall=33554432
sudo sysctl -w kern.sysv.shmseg=1024
sudo sysctl -w kern.sysv.shmmni=32
这些值应该足以运行多达 5 个具有共享内存通信的节点。如果您需要启动更多节点,请相应地更改值。例如,为了能够启动 10 个节点,上面的每个值都应该加倍。
上述更改将仅在重新启动之前生效。要使它们持久化,请将以下内容添加到/etc/launchd.conf
(您可能必须创建它):
limit maxfiles 100000 100000
,以及以下内容/etc/sysctl.conf
(您可能还必须创建它):
kern.maxfiles=40000
kern.maxfilesperproc=20000
kern.sysv.shmmax=33554432
kern.sysv.shmall=33554432
kern.sysv.shmseg=1024
kern.sysv.shmmni=32
之后,您的更改将在重新启动后继续存在。
TCP 回退
注意,当一个节点分配共享内存段失败时,它会透明地切换到 TCP 通信。