`ejabberdctl start` 导致“内核 pid 终止”错误——我该怎么办?

Posted

技术标签:

【中文标题】`ejabberdctl start` 导致“内核 pid 终止”错误——我该怎么办?【英文标题】:`ejabberdctl start` results in "kernel pid terminated" error -- what do I do? 【发布时间】:2013-09-09 11:25:55 【问题描述】:

我用谷歌搜索了三个小时,但无济于事。

我有一个没有使用 apt 安装的 ejabberd 安装。它是从源代码安装的,其中没有名为 ejabberd 的程序。启动和停止,一切都通过 ejabberdctl。

它完美地运行了一个月,突然有一天它因臭名昭著而停止了

kernel pid terminated error

任何时候都可以

sudo ejabberdctl start --node ejabberd@MasterService

生成了一个 erl_crash 文件,当我尝试时

ejabberdctl

我明白了

Failed to connect to RPC at node ejabberd@MasterService

现在我尝试了什么

    尝试杀死 ejabberd、beam、epmd 的所有正在运行的进程并重新开始 - 无效 检查了 /etc/hosts 和主机名,一切正常。主机名在带有 IP 的 hosts 文件中提供 检查 ejabberdctl.conf 文件以确保主机名确实正确且节点名正确 正在创建已检查的 .erlange.cookie 文件,其中包含内容

在所有网络中,搜索都以一种或另一种方式引导我找到上述任何一种。

我无处可去,也不知道去哪里找。任何帮助将非常感激。

【问题讨论】:

您确定没有在标准(或配置)端口(5222、5269、5223 等)上监听吗?我的意思是,虽然没有运行 ejabberd 的实例。 【参考方案1】:

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

为了执行这项任务,Erlang 有一个特殊的 web 工具(称为,呃,webtool),可以使用一个特殊的应用程序 - 崩溃转储查看器 - 加载转储并检查 Erlang 进程的堆栈跟踪坠机时间。

你必须

    安装必要的包:

    # apt-get install erlang-webtool erlang-observer
    

    启动一个 Erlang 解释器:

    $ erl
    

    (那里采取了进一步的行动。)

    运行网络工具。在最简单的情况下,它会监听本地主机:

    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, 1server_name 子句可能使用任意名称——这将打印在生成的 URL 中,即服务器的主机名。

    现在使用浏览器连接到该工具,导航到“开始工具”菜单条目,启动故障转储查看器,并在工具的顶部菜单中显示指向它的链接。继续并找到加载故障转储的链接。

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

    要退出该工具,请运行

    webtool:stop().
    

    在运行的 Erlang 解释器中。然后通过运行退出它

    q().
    

    稍等片刻或按Ctrl-g,然后输入字母q,然后按回车键。

相关链接为:crash dump viewer manual 和webtool manual。

【讨论】:

以上是关于`ejabberdctl start` 导致“内核 pid 终止”错误——我该怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

ejabberd:使用 ejabberdctl 操作书签

ejabberd - 带有 ejabberdctl 的 mucsub

cpu 如何向内核发送有关硬件异常的信号?

arm-linux内核start_kernel之前启动分析-开启MMU,走进新时代

内核启动流程

从 PHP 创建 ejabberd 用户