Эрланг использует 100% один из процессоров - PullRequest
3 голосов
/ 11 февраля 2011

У меня есть ситуация, когда мой проект заморожен. Я вижу только 100% использования одного из процессоров (остальное 0%, но я использую SMP).

И моя консоль администратора говорит:

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

После этого я не могу подключиться к узлу.

Если я программирую на C ++, я могу сделать отладочную сборку, и когда такая ситуация возникает, я могу присоединиться к своему процессу и посмотреть код, где он зацикливается.

Но как я могу сделать это в Эрланге? Как я могу получить стек вызовов или что-то, что поможет мне понять, что действительно не так?

Спасибо за любую помощь.

Ответы [ 2 ]

6 голосов
/ 11 февраля 2011

Вы можете скомпилировать свой модуль с отладочной информацией в командной строке:

$ erlc +debug_info module.erl

Или в оболочке Erlang:

1> c(module, debug_info).
ok

Когда вы уже начали свой процесс, у вас естьВозможность прикрепить к рабочему процессу.Запустите отладчик в вашей оболочке erlang:

2> debugger:start().

Появится окно отладчика.В меню выберите Модуль -> Интерпретировать и выберите соответствующий модуль, к которому вы хотите подключиться, в диалоговом окне Интерпретация.Когда вы это сделаете, вы увидите свой модуль в правом окне отладчика.

Теперь выберите Процесс -> Присоединить , должно появиться окно Присоединить процесс.

1 голос
/ 11 февраля 2011

если дистрибутив erlang отключен, вы не можете использовать удаленную отладку, поскольку не можете подключиться к узлу.Вы должны были бы подключиться к каналам, созданным виртуальной машиной при запуске, если это настроено.См. http://www.erlang.org/doc/man/run_erl.html о том, как это сделать.

Вы также можете зайти в эту ветку по причине, почему ваша система ведет себя так, как она есть: http://www.erlang.org/cgi-bin/ezmlm-cgi?4:mss:55859:201101:jconogbffcaogeijbdkl

...