2013-09-05 162 views
0

我已经搜索了三个小时,但无济于事。`ejabberdctl start`导致“kernel pid terminated”错误 - 我该怎么办?

我有一个ejabberd安装不使用apt安装。它从源代码安装,并没有名为ejabberd的程序。开始和停止,一切都通过ejabberdctl。

有人一个月运行完美,突然有一天它与臭名昭著

kernel pid terminated error 

随时停止我做

sudo ejabberdctl start --node [email protected] 

一个erl_crash文件被产生,当我尝试

ejabberdctl 

我得到

Failed to connect to RPC at node [email protected] 

现在什么都我想

  1. 试图杀死ejabberd,梁的所有正在运行的进程,EPMD和新鲜的开始 - 没有工作
  2. 经过/ etc/hosts和主机名,一切都很好。主机名在主机提供的IP
  3. 经过的ejabberdctl.conf文件,以确保德主机名的文件确实是正确的和节点名称是正确
  4. 被查.erlange.cookie文件正在与内容在它
  5. 创建

在所有网络上,搜索引导我到上述任何一个。

我无处可去,不知道还有什么地方可以看。任何帮助将非常感激。

+0

你确定没有在标准(或配置)端口(5222,5296,523等)上监听吗?我的意思是,虽然没有'ejabberd'的实例正在运行。 – kostix

回答

1

您必须分析故障转储以尝试猜测它失败的原因。

要完成这项任务,二郎神有一个特殊的webtool(叫,呃,webtool)从一个特殊的应用—崩溃转储查看器—可能被用于在加载转储和检查Erlang进程的堆栈跟踪坠机时间。

你必须

  1. 安装必要的程序包:

    # apt-get install erlang-webtool erlang-observer 
    
  2. 启动一个Erlang解释:

    $ erl 
    

    (进一步行动采取有)

  3. 运行webtool。在最简单的情况下,它将在本地主机上侦听:

    webtool:start(). 
    

    (注意期间。)它将打印一个URL,以在浏览器中导航到达正在运行的工具。

    如果这种情况发生在服务器上,你宁愿喜欢有一些非本地主机接口上的webtool听,呼叫encantation将是棘手:

    webtool:start(standard_path, [{port, 8888}, {bind_address, {0, 0, 0, 0}}, {server_name, "server.example.com"}]). 
    

    {0, 0, 0, 0} IP规范将让它无处不在,并且你还可以指定一些更明智的八位字节,如{192, 168, 0, 1}server_name子句可能使用任意名称—这是将在生成的URL(服务器的主机名)中打印的内容。

  4. 现在使用您的浏览器连接到该工具,导航到“开始工具”菜单项,启动崩溃转储查看器并将其链接到工具的顶部菜单中。在那里继续并找到加载故障转储的链接。

  5. 加载故障转储后,尝试使用该工具的界面来查看活动的Erlang进程的堆栈跟踪。至少其中一个应该包含一些可疑的东西,其中应该包含一条错误消息—,这就是你正在寻求改进你的问题(或询问另一个在ejabberd mailing list)。

  6. 要退出工具,在运行的Erlang解释器中运行

    webtool:stop(). 
    

    。然后通过运行

    q(). 
    

    ,并等待一个位或按Ctrl-g,然后进入依次按下回车键的字母q退出,要么。

相关链接:在crash dump viewer manualwebtool manual