"no next heap size found: 18446744071789822643, offset 0"

"no next heap size found: 18446744071789822643, offset 0"

我写了一个模拟器,它分布在两个主机上。当我启动几千个进程时,在写入大约 10 分钟和 50 万个事件后,我的主要 Erlang (OTP v22) 虚拟机崩溃并显示以下消息:

no next heap size found: 18446744071789822643, offset 0.

总是同一个数字 - 18446744071789822643。

因为我的服务器功能强大,故障转储也很大,我无法在无头服务器(未安装 WX)上查看它。

关于我可以查看的内容有什么提示吗?

我可以尝试调试此问题的第一件事是什么?

首先,看看memory()是怎么说的:

> memory().
[{total,18480016},
 {processes,4615512},
 {processes_used,4614480},
 {system,13864504},
 {atom,331273},
 {atom_used,306525},
 {binary,47632},
 {code,5625561},
 {ets,438056}]

检查哪个在生长 - processesbinaryets?

如果是 processes,请尝试在 Erlang shell 中键入 i().,而进程是 运行。您会看到如下内容:

Pid                   Initial Call                          Heap     Reds Msgs
Registered            Current Function                     Stack              
<0.0.0>               otp_ring0:start/2                      233     1263    0
init                  init:loop/1                              2              
<0.1.0>               erts_code_purger:start/0               233       44    0
erts_code_purger      erts_code_purger:wait_for_request        0              
<0.2.0>               erts_literal_area_collector:start      233        9    0
                      erts_literal_area_collector:msg_l        5              
<0.3.0>               erts_dirty_process_signal_handler      233      128    0
                      erts_dirty_process_signal_handler        2              
<0.4.0>               erts_dirty_process_signal_handler      233        9    0
                      erts_dirty_process_signal_handler        2              
<0.5.0>               erts_dirty_process_signal_handler      233        9    0
                      erts_dirty_process_signal_handler        2              
<0.8.0>               erlang:apply/2                        6772   238183    0
erl_prim_loader       erl_prim_loader:loop/3                   5              

寻找具有非常大堆的进程,这就是您开始寻找内存泄漏的地方。

(如果你不是 运行 headless,我建议使用 observer:start() 启动 Observer,然后查看 Erlang 节点中发生的情况。)