Я запускаю ejabberd, и время от времени он падает. Чтобы выяснить, почему произошел сбой, я знаю, что нужно посмотреть в erl_crash.dump. Проблема в том, что файла erl_crash.dump не существует. Однако есть файл дампа ядра. Загрузив его в gdb и запустив «bt full», вот два верхних кадра:
(gdb) bt full
#0 0x000000000054df83 in prepare_crash_dump (secs=<optimized out>) at sys/unix/sys.c:735
max = <optimized out>
env = "\005", '\000' <repeats 15 times>"\200, \373!ڴ"
heart_port = 0x7fb46f31eab0
hp = 0x7fb4d6efb938
heart_fd = {865035, -1}
has_heart = 0
i = <optimized out>
envsz = <optimized out>
heap = {4460060, 140412855877120, 1}
list = 18446744073709551611
#1 erts_sys_prepare_crash_dump (secs=<optimized out>) at sys/unix/sys.c:780
Итак, похоже, что он разбился, когда пытался записать аварийный дамп, но не до конца. Я провел некоторое исследование, и это очень похоже на проблему, о которой сообщалось ранее (https://groups.google.com/forum/#!msg/erlang-programming/XH2Uly6hsLY/aeR2Yx2UkZMJ). Сердце не было включено в командной строке, что означает, что это не должно быть проблемой, но... в дампе ядра для параметра heart_port установлено ненулевое значение. Это должно означать, что где-то прячется сердце, не так ли? Если да, то есть ли способ заставить сердце на самом деле не работать?