解决erlang节点启动失败报"inet_tcp",econnrefused的问题

今天有同事说他机器上的leofs启动不了。我用console起了一下,发现报如下错:

{error_logger,{{2015,11,3},{6,23,6}},"Protocol: ~tp: register/listen error: ~tp~n",["inet_tcp",econnrefused]}
{error_logger,{{2015,11,3},{6,23,6}},crash_report,[[{initial_call,{net_kernel,init,['Argument__1']}},{pid,<0.601.0>},{registered_name,[]},{error_info,{exit,{error,badarg},[{gen_server,init_it,6,[{file,"gen_server.erl"},{line,322}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,237}]}]}},{ancestors,[net_sup,kernel_sup,<0.591.0>]},{messages,[]},{links,[#Port<0.1236>,<0.598.0>]},{dictionary,[{longnames,true}]},{trap_exit,true},{status,running},{heap_size,610},{stack_size,27},{reductions,774}],[]]}
{error_logger,{{2015,11,3},{6,23,6}},supervisor_report,[{supervisor,{local,net_sup}},{errorContext,start_error},{reason,{'EXIT',nodistribution}},{offender,[{pid,undefined},{name,net_kernel},{mfargs,{net_kernel,start_link,[[,longnames]]}},{restart_type,permanent},{shutdown,2},{child_type,worker}]}]}
{error_logger,{{2015,11,3},{6,23,6}},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}]}]}
...
怀疑是EPMD有问题。尝试erl,可以正常启动;尝试erl -name ,报类似的错误。

尝试epmd -debug,得到如下信息:

epmd: Tue Nov 3 09:00:04 2015: epmd running - daemon = 0
epmd: Tue Nov 3 09:00:04 2015: there is already a epmd running at port 4369
尝试ps axu grep epmd,没有发现进程:

root 16308 0.0 0.0 112640 976 pts/6 S+ 09:00 0:00 grep --color=auto epmd
尝试lsof -i:4369,发现如下进程占用了4369端口:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
docker 25840 root 4u IPv4 80940 0t0 TCP registry.xxxxxx.com:epmd (LISTEN)
杀掉该进程后,恢复正常。确定了问题是EPMD的默认端口号被其它进程占用导致。解决方案:可以在启动EPMD时指定其端口号,也可以设置环境变量ERL_EPMD_PORT来指定其端口号。但是这样治标不治本,合理的做法还是规划好服务器上要启动的服务及其需要使用的端口号,避免冲突。

关于EPMD的介绍和使用,可以看这里: http://www.erlang.org/doc/man/epmd.html

更多相关文章
  • 开源监控利器nagios实战 作者:田逸([email protected]) from: http://net.it168.com/a2009/0309/267/000000267878.shtml 俗话说:工欲善其事,必先利其器.要做好系统管理,使自己的工作更轻松更有效的话,一个好的监控工具是必不可少的了 ...
  • 现在个人隐私和个人信息的保护越来越受到人们的关注,我们也越来越留心防止个人信息和隐私的泄露.但是在如今这个网络越来越便捷的时代,我们在享受到方便服务的同时,也承担着越来越严重的风险,甚至是一个邮箱也可以出卖你的真实身份给犯罪份子有机可乘. 用搜索引擎通过邮箱检索个人信息或者通过某些不正规公司购买个人 ...
  • [python]  int(x [,base ])         将x转换为一个整数     long(x [,base ])        将x转换为一个长整数     float(x )               将x转换到一个浮点数     complex(real [,imag ])   ...
  • javascript有两种定显示器, setTimeout和setInterval,下面简要介绍两个函数然后附上简单的例子. setTimeout(function, time) , 当定位到time间隔则执行function函数,执行一次就不再执行 clearTimeout(t), 结束setTi ...
  •  通过微信盗取银行存款早已不是个例,窃贼是如何绕过支付密码利用微信支付平台转走银行钱款?受害者曾经一度忽略的提醒和出现的异常又代表窃贼如何行窃?让我们看看近日水木社区出现的一则热贴:关于一个博士生"微信钱财被盗连载". 绕过支付密码盗取微信存款 受害者在微信上绑定了银行卡(余额2 ...
  • Java入门 如果你才刚开始接触Java世界,那么要做的第一件事情是,安装JDK——Java Development Kit(Java开发工具包),它自带有Java Runtime Environment(JRE)和JVM(Java运行时环境).它能让你在自己的电脑上编译.运行.测试你的Java程序 ...
一周排行