我用Google搜索了三个小时但无济于事。
我有一个未使用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
现在我尝试了什么
在所有的网络中,搜索引导我进入上述任何一种方式。
我无处可去,不知道还有什么去看。任何帮助将非常感激。
答案 0 :(得分:1)
您必须分析崩溃转储以尝试猜测它失败的原因。
为了执行此任务,Erlang有一个特殊的webtool(称为嗯,webtool
),可以使用特殊的应用程序 - Crash Dump Viewer - 来加载转储并检查Erlang的堆栈跟踪崩溃时的过程。
你必须
安装必要的软件包:
# apt-get install erlang-webtool erlang-observer
启动Erlang解释器:
$ erl
(在那里采取进一步行动。)
运行webtool。在最简单的情况下,它将监听本地主机:
webtool:start().
(注意句号。)它会打印一个URL,在浏览器中导航以访问正在运行的工具。
如果在服务器上发生这种情况,并且您更愿意让webtool监听某些非本地主机接口,那么呼叫限制将会更加棘手:
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
,然后按返回键。