`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, 1
。 server_name
子句可能使用任意名称——这将打印在生成的 URL 中,即服务器的主机名。
现在使用浏览器连接到该工具,导航到“开始工具”菜单条目,启动故障转储查看器,并在工具的顶部菜单中显示指向它的链接。继续并找到加载故障转储的链接。
在加载故障转储后,尝试使用工具界面查看活动 Erlang 进程的堆栈跟踪。其中至少有一个应该包含一些可疑的内容,其中应该包含一条错误消息——这就是你要细化你的问题(或在ejabberd mailing list 询问另一个)。
要退出该工具,请运行
webtool:stop().
在运行的 Erlang 解释器中。然后通过运行退出它
q().
稍等片刻或按Ctrl-g
,然后输入字母q
,然后按回车键。
相关链接为:crash dump viewer manual 和webtool manual。
【讨论】:
以上是关于`ejabberdctl start` 导致“内核 pid 终止”错误——我该怎么办?的主要内容,如果未能解决你的问题,请参考以下文章
ejabberd - 带有 ejabberdctl 的 mucsub