Erlang 崩溃转储不再有索引条目



我对 erlang 有问题。
我的一个 Erlang 节点崩溃,并生成了 erl_crash.dump,原因atom_tab中没有更多的索引条目 (max=1048576)。
我检查了转储文件,发现有很多原子的形式为'B\2209\000...,(大约1000000个条目)

=proc:<0.11744.7038>
State: Waiting
Name: 'B220900d22D.
Spawned as: proc_lib:init_p/5
Spawned by: <0.5032.0>
Started: Sun Feb 23 05:23:27 2014
Message queue length: 0
Number of heap fragments: 0
Heap fragment data: 0
Reductions: 1992
Stack+heap: 1597
OldHeap: 1597
Heap unused: 918
OldHeap unused: 376
Program counter: 0x0000000001eb7700 (gen_fsm:loop/7 + 140)
CP: 0x0000000000000000 (invalid)
arity = 0

你对它们有什么经验吗?

原子 默认情况下,最大原子数为 1048576。可以使用 +t 选项提高或降低此限制。

注意:原子是指也消耗内存的原子表。对于此表中的每个唯一原子,原子文本存储一次。原子表不是垃圾回收的。

我认为你在程序中产生了很多原子,原子的数量达到了原子的数量限制。

您可以使用此+t选项在启动 erlang 节点时更改 erlang VM 中 atom 的数量限制。

所以它告诉你,你生成原子。list_to_atom/1某处使用变量参数调用。因为您具有具有此类名称的进程,因此register/2具有此名称的进程。它可能是您的代码或您使用的第三方模块。这是不良行为。不要这样做,也不要使用正在这样做的模块。

老实说,我可以想象设计我会故意这样做,但这是非常特殊的情况,当你问这个问题时显然不是这样。

最新更新