WSL2下Erlang/OTP长名称模式节点连接及net_adm:names()冻结问题
Erlang长名称(longnames)模式下RPC调用问题排查
问题场景
- 本地机器名
Pandora,启动后台节点命令:erl -detached -noshell -name 'node1@Pandora' -setcookie pandemic - 脚本使用
name_domain => shortnames时运行正常,切换为name_domain => longnames后报错:=ERROR REPORT==== 6-Oct-2024::14:09:07.875238 === ** System running to use fully qualified hostnames ** ** Hostname Pandora is illegal ** - 后续处理:创建本地
erl_inetrc文件设置{domain, "myoffice.loc"},修改节点名为'testnode@Pandora.myoffice.loc'和'node1@Pandora.myoffice.loc'并配置ERL_INETRC环境变量后,脚本在net_adm:names()处冻结,但erl_epmd:names()可正常运行。
原因分析
- 两个函数的工作机制差异
erl_epmd:names()仅直接查询本地epmd服务,不依赖DNS解析,所以能正常执行。net_adm:names()会尝试通过DNS反向解析匹配主机名,当系统无法解析Pandora.myoffice.loc这个FQDN时,会因DNS查询超时导致冻结。
- 长名称模式的解析要求
longnames模式要求节点名中的主机部分必须是可解析的FQDN,不仅要正向解析到IP,还需要反向解析回对应主机名。仅通过erl_inetrc设置域名后缀,没有在系统层面完成解析配置,Erlang无法完成必要的DNS校验。
解决步骤
- 配置本地hosts文件
在/etc/hosts(Linux/macOS)或C:\Windows\System32\drivers\etc\hosts(Windows)中添加以下内容,让系统直接解析该FQDN:127.0.0.1 Pandora.myoffice.loc Pandora ::1 Pandora.myoffice.loc Pandora - 重启节点
关闭原有节点,使用正确的长名称重新启动:erl -detached -noshell -name 'node1@Pandora.myoffice.loc' -setcookie pandemic - 验证解析有效性
先在终端执行ping Pandora.myoffice.loc,确认能正常解析到本地IP,再运行脚本测试net_adm:names()是否恢复正常。
补充:
erl_inetrc的domain设置仅用于补全短主机名的后缀,前提是补全后的FQDN能被系统解析,否则仍会出现网络相关问题。
内容的提问来源于stack exchange,提问作者sthames42
相关产品推荐
相关产品推荐

