【问题标题】:erlang node not respondingerlang节点没有响应
【发布时间】:2011-06-02 12:32:46
【问题描述】:

我在第一个@localhost 节点的 erlang condose 中收到了这样的消息

=ERROR REPORT==== 1-Jan-2011::23:19:28 ===
** Node 'second@localhost' not responding **
** Removing (timedout) connection **

我的问题是 - 在这种情况下什么是超时?多久之前导致此事件? 如何防范这种“恐怖”?我只能通过重新启动节点来恢复\恢复正常工作...... 但是正确的方法是什么?

谢谢你,新年快乐!

【问题讨论】:

    标签: erlang mnesia


    【解决方案1】:

    在Erlang源代码中查找notresponsive字符串,可以看到kernel应用程序(con_loop函数)的dist_util模块中消息是如何生成的。

        {error, not_responding} ->
            error_msg("** Node ~p not responding **~n"
                  "** Removing (timedout) connection **~n",
                  [Node]),
    

    在该模块中,存在以下文档,解释滴答声和不响应节点背后的逻辑:

    %%
    %% Send a TICK to the other side.
    %%
    %% This will happen every 15 seconds (by default) 
    %% The idea here is that every 15 secs, we write a little 
    %% something on the connection if we haven't written anything for 
    %% the last 15 secs.
    %% This will ensure that nodes that are not responding due to 
    %% hardware errors (Or being suspended by means of ^Z) will 
    %% be considered to be down. If we do not want to have this  
    %% we must start the net_kernel (in erlang) without its 
    %% ticker process, In that case this code will never run 
    
    %% And then every 60 seconds we also check the connection and 
    %% close it if we havn't received anything on it for the 
    %% last 60 secs. If ticked == tick we havn't received anything 
    %% on the connection the last 60 secs. 
    
    %% The detection time interval is thus, by default, 45s < DT < 75s 
    
    %% A HIDDEN node is always (if not a pending write) ticked if 
    %% we haven't read anything as a hidden node only ticks when it receives 
    %% a TICK !! 
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-10-15
      • 2021-02-07
      • 2015-04-11
      • 2018-12-29
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 2021-05-06
      • 2019-05-27
      相关资源
      最近更新 更多