Centos Stream 9 上 RabbitMQ 节点的高初始内存消耗
·2 分钟阅读
RabbitMQ 团队和社区成员最近发现了一个有趣的场景,即新启动的节点可能会消耗惊人的大量内存,例如 1.5 GiB 左右。我们想与社区分享我们的发现,并解释可用的短期和长期解决方法。
一些最新的 Linux 发行版,例如 ArchLinux、RHEL 9 和 CentOS Stream 9,发布了最新版本的 systemd ,该版本将默认打开文件句柄限制设置为 1073741816,或大约十亿。这远高于旧版本发行版(如 CentOS 8)使用的默认值。
对于许多软件来说,这不会改变任何事情。但是,Erlang 运行时将在文件句柄限制非常高的系统上预先分配更多内存。这导致新启动的 RabbitMQ 节点在没有任何数据或有意义的客户端活动的情况下,占用空间出奇地高。
有两种方法可以缓解这个问题
- 降低运行节点的用户的(通常名为
rabbitmq
)文件句柄限制 - 将
ERL_MAX_PORTS
环境变量设置为较低的值
对于给定的环境,更合适的值是多少取决于工作负载。50,000 到 100,000 范围内的默认值应该可以支持许多情况下的大量并发客户端连接、队列和流,而不会导致运行时过度预先分配内存。