You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用rebar3时Erlang的Kernel参数inet_dist_listen_min不生效问题

解决rebar3 shell下inet_dist_listen_min/max参数不生效的问题

问题根源

rebar3 shell的启动流程和直接用erl命令不同:它会先完成Erlang节点的初始化(包括分布式监听端口的分配),之后才加载sys.config里的kernel参数。而inet_dist_listen_min和inet_dist_listen_max是节点启动阶段的核心参数,必须在节点初始化前传入才能生效,这就导致配置文件里的参数加载时机太晚,没起到作用。

解决方法

方法1:通过vm.args提前传入参数(长期配置)

  • 在项目根目录的config文件夹下新建或编辑vm.args文件,添加以下内容:
-kernel inet_dist_listen_min 25672
-kernel inet_dist_listen_max 25680
  • 在rebar.config中添加配置,让rebar3启动时读取这个vm.args文件:
{vm_args, "config/vm.args"}.

之后再用rebar3 shell --sname apple启动,节点初始化时就会读取这些参数,端口会被限制在指定范围内。

方法2:启动时直接传入参数(临时测试)

如果只是临时验证,不用修改配置文件,启动时通过--erl参数直接把参数传给Erlang虚拟机:

rebar3 shell --sname apple --erl "-kernel inet_dist_listen_min 25672 inet_dist_listen_max 25680"

验证方式

启动节点后,可以用两种方式确认端口是否生效:

  • 在Erlang shell里执行inet:i().,查看输出中tcp类型的监听端口,确认是否在25672-25680区间内。
  • 用系统命令检查(以Linux为例):
ss -tulpn | grep beam.smp

找到对应beam进程的监听端口,确认范围正确。

内容的提问来源于stack exchange,提问作者孙海城

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 00:09:57