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

时间:2014-02-24 07:13:21

标签: erlang crash-dumps

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

=proc:<0.11744.7038>
State: Waiting
Name: 'B\2209\000d\022D.
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
你有什么经验吗?

2 个答案:

答案 0 :(得分:2)

  

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

     

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

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

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

答案 1 :(得分:1)

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

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