首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Erlang报告epmd_closed错误

Erlang报告epmd_closed错误
EN

Stack Overflow用户
提问于 2013-04-20 22:48:46
回答 2查看 5.6K关注 0票数 8

Erlang版本: R16B

操作系统: Fedora17

erl -name aerl -sname a都报告了以下错误:

代码语言:javascript
复制
{error_logger,{{2013,4,20},{14,50,20}},"Protocol: ~tp: register/listen error: ~tp~n",["inet_tcp",epmd_close]}
{error_logger,{{2013,4,20},{14,50,20}},crash_report,[[{initial_call,{net_kernel,init,['Argument__1']}},{pid,<0.21.0>},{registered_name,[]},{error_info,{exit,{error,badarg},[{gen_server,init_it,6,[{file,"gen_server.erl"},{line,320}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,239}]}]}},{ancestors,[net_sup,kernel_sup,<0.10.0>]},{messages,[]},{links,[#Port<0.56>,<0.18.0>]},{dictionary,[{longnames,true}]},{trap_exit,true},{status,running},{heap_size,376},{stack_size,27},{reductions,728}],[]]}
{error_logger,{{2013,4,20},{14,50,20}},supervisor_report,[{supervisor,{local,net_sup}},{errorContext,start_error},{reason,{'EXIT',nodistribution}},{offender,[{pid,undefined},{name,net_kernel},{mfargs,{net_kernel,start_link,[[s,longnames]]}},{restart_type,permanent},{shutdown,2000},{child_type,worker}]}]}
{error_logger,{{2013,4,20},{14,50,20}},supervisor_report,[{supervisor,{local,kernel_sup}},{errorContext,start_error},{reason,{shutdown,{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}}},{offender,[{pid,undefined},{name,net_sup},{mfargs,{erl_distribution,start_link,[]}},{restart_type,permanent},{shutdown,infinity},{child_type,supervisor}]}]}
{error_logger,{{2013,4,20},{14,50,20}},crash_report,[[{initial_call,{application_master,init,['Argument__1','Argument__2','Argument__3','Argument__4']}},{pid,<0.9.0>},{registered_name,[]},{error_info,{exit,{{shutdown,{failed_to_start_child,net_sup,{shutdown,{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}}}},{kernel,start,[normal,[]]}},[{application_master,init,4,[{file,"application_master.erl"},{line,138}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,239}]}]}},{ancestors,[<0.8.0>]},{messages,[{'EXIT',<0.10.0>,normal}]},{links,[<0.8.0>,<0.7.0>]},{dictionary,[]},{trap_exit,true},{status,running},{heap_size,376},{stack_size,27},{reductions,117}],[]]}
{error_logger,{{2013,4,20},{14,50,20}},std_info,[{application,kernel},{exited,{{shutdown,{failed_to_start_child,net_sup,{shutdown,{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}}}},{kernel,start,[normal,[]]}}},{type,permanent}]}
{"Kernel pid terminated",application_controller,"{application_start_failure,kernel,{{shutdown,{failed_to_start_child,net_sup,{shutdown,{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}}}},{kernel,start,[normal,[]]}}}"}

Crash dump was written to: erl_crash.dump
Kernel pid terminated (application_controller) ({application_start_failure,kernel,{{shutdown,{failed_to_start_child,net_sup,{shutdown,{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}}}},{k

以下是iptables:

代码语言:javascript
复制
> iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       icmp --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

下面是erl:

代码语言:javascript
复制
> erl
Erlang R16B (erts-5.10.1) [source] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V5.10.1  (abort with ^G)
1>

它在Linode VPS上,以前是可以的。我不知道这个问题的原因是什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-13 21:37:08

问题可能出在iptables配置上。

默认情况下,Erlang不允许从非本地地址连接到epmd。如果我没记错的话,这种行为在新的Erlang版本中是实际存在的。您似乎遇到了与NAT/伪装相关的iptables问题-您的传出流量被iptables伪装到外部IP地址(包括来自/去往127.0.0.1的流量)。

示例

伪装所有传出流量

代码语言:javascript
复制
-A POSTROUTING -j SNAT --to-source x.x.x.x

这是'iptables -t nat --list‘的输出

代码语言:javascript
复制
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
SNAT       all  --  anywhere             anywhere             to:x.x.x.x

检查'erl -sname a‘-不工作,完全相同的错误

现在,伪装除指向127.0.0.0/8之外的所有传出流量

代码语言:javascript
复制
-A POSTROUTING ! -d 127.0.0.0/8 -j SNAT --to-source x.x.x.x

注意添加的'!-d 127.0.0.0/8

再次检查iptables

代码语言:javascript
复制
#iptables -t nat --list
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
SNAT       all  --  anywhere            !127.0.0.0/8          to:x.x.x.x

并再次检查erlang:

代码语言:javascript
复制
#erl -sname a
Erlang R15B01 (erts-5.9.1) [source] [64-bit] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.9.1  (abort with ^G)
(a@akitaki)1> q().
ok
(a@akitaki)2> %

它工作得很完美。

因此,请尝试检查iptables/防火墙NAT/伪装配置。

更新

要实现NAT/伪装,您可以使用以下iptables规则之一:

代码语言:javascript
复制
-A POSTROUTING ! -d 127.0.0.0/8 -j SNAT --to-source x.x.x.x

代码语言:javascript
复制
-A POSTROUTING ! -d 127.0.0.0/8 -j MASQUERADE

在第一种情况下(‘源NAT'),您应该明确指出您的外部IP地址。您可以使用以下命令了解它:

代码语言:javascript
复制
#ifconfig

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet 127.0.0.1 netmask 0xff000000
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether 70:56:81:98:d1:b9
    inet X.X.X.X netmask 0xffffff00 broadcast Y.Y.Y.Y
    media: autoselect
    status: active

inet X.X网络掩码0xffffff00广播Y.Y

这里的x.x是您应该在'--SNAT x.x‘命令中指向的外部IP地址

在第二种情况下(‘伪装’),你没有明确指出你的外部IP地址--你的服务器会自动指出。

票数 11
EN

Stack Overflow用户

发布于 2013-05-18 17:08:39

这个问题与epmd无法完成其工作有关。其他的一切似乎都是这个问题的余波。我将把重点放在epmd上,并首先在VPS中工作,然后再关注Erlang节点。

由于某些原因,您没有获得epmd,然后结果是到处都是故障。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16121632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档