我用谷歌搜索了三个小时但没有结果。
我有一个 ejabberd 安装,但不是使用 apt 安装的。它是从源代码安装的,其中没有名为 ejabberd 的程序。启动和停止,一切都是通过 ejabberdctl 进行的。
它完美地运行了一个月,突然有一天它因臭名昭著的问题而停止了
kernel pid terminated error
任何时候我都会
sudo ejabberdctl start --node ejabberd@MasterService
生成 erl_crash 文件,当我尝试时
ejabberdctl
i get
Failed to connect to RPC at node ejabberd@MasterService
现在我尝试了什么
- 尝试终止 ejabberd、beam、epmd 的所有正在运行的进程并重新启动 - 不起作用
- 检查了 /etc/hosts 和主机名,一切正常。主机名与 IP 一起在主机文件中提供
- 检查 ejabberdctl.conf 文件以确保主机名确实正确并且节点名称正确
- 检查正在创建的 .erlang.cookie 文件及其内容
在所有网络中,搜索都以某种方式引导我找到上述任一方式。
我无处可去,也不知道还能去哪里寻找。任何帮助将非常感激。
您必须分析故障转储以尝试猜测它失败的原因。
为了执行这个任务,Erlang 有一个特殊的网络工具(叫做,呃,webtool
),其中一个特殊的应用程序——崩溃转储查看器——可用于加载转储并检查崩溃时 Erlang 进程的堆栈跟踪。
你必须
-
安装必要的软件包:
# apt-get install erlang-webtool erlang-observer
-
启动 Erlang 解释器:
$ erl
(在那里采取进一步的行动。)
-
运行网络工具。在最简单的情况下,它将监听本地主机:
webtool:start().
(注意句点。)它将打印回一个 URL,以便在浏览器中导航以访问正在运行的工具。
如果这种情况发生在服务器上,并且您希望让 Webtool 侦听某个非本地主机接口,则调用咒语会更加棘手:
webtool:start(standard_path, [{port, 8888}, {bind_address, {0, 0, 0, 0}}, {server_name, "server.example.com"}]).
The {0, 0, 0, 0}
IP 规范将使其在任何地方监听,您不妨指定一些更合理的八位位组,例如{192, 168, 0, 1}
. The server_name
子句可能使用任意名称——这就是将在生成的 URL 中打印的内容,即服务器的主机名。
现在使用浏览器连接到该工具,导航到“启动工具”菜单条目,启动故障转储查看器并将其链接显示在该工具的顶部菜单中。继续前进并找到加载故障转储的链接。
加载故障转储后,尝试使用该工具的界面来查看活动 Erlang 进程的堆栈跟踪。其中至少有一个应该包含一些可疑的内容,其中应该包含一条错误消息 - 这就是您要完善您的问题的内容(或者在ejabberd 邮件列表 http://lists.jabber.ru).
-
要退出该工具,请运行
webtool:stop().
在运行的 Erlang 解释器中。然后通过运行退出它
q().
稍等一下或按Ctrl-g
然后输入字母q
然后按回车键。
相关链接是:故障转储查看器手册 http://www.erlang.org/doc/apps/observer/crashdump_ug.html和网络工具手册 http://www.erlang.org/doc/man/webtool.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)