erlang使用100%的CPU之一

时间:2011-02-11 12:12:30

标签: erlang stack-trace

我的项目被冻结的情况。 我看到只有100%使用其中一个CPU(其余的是0%,但我使用的是SMP)。

我的管理控制台说:

=ERROR REPORT==== 11-Feb-2011::00:45:00 ===
** Node 'node@example.com' not responding **
** Removing (timedout) connection **

之后我无法连接到节点。

如果我使用C ++进行编程,我可以进行调试构建,当发生这种情况时,我可以附加到我的进程并查看它循环的代码。

但我怎么能在Erlang中做到这一点?我如何获得调用堆栈或其他东西来帮助我理解错误的原因?

感谢您的帮助。

2 个答案:

答案 0 :(得分:6)

您可以在命令行中使用调试信息编译模块:

$ erlc +debug_info module.erl

或者在Erlang shell中:

1> c(module, debug_info).
ok

当您已经开始流程时,您可以选择附加到工作流程。在erlang shell中启动调试器:

2> debugger:start().

将出现调试器窗口。从菜单中选择模块 - >解释并在“解释对话框”窗口中选择要附加到的相应模块。执行此操作后,您将在调试器的右侧窗口中看到您的模块。

现在选择处理 - >附加,应显示附加处理窗口。

答案 1 :(得分:1)

如果erlang发行版已关闭,则无法使用任何远程调试,因为无法连接到节点。如果配置为启动,则必须在启动时连接到VM创建的管道。请参阅http://www.erlang.org/doc/man/run_erl.html了解如何操作。

您可能还想查看此主题,了解系统的行为方式:http://www.erlang.org/cgi-bin/ezmlm-cgi?4:mss:55859:201101:jconogbffcaogeijbdkl