Ejabberd记忆消耗(或泄漏?)

时间:2009-12-05 22:27:21

标签: erlang memory-management ejabberd mnesia

我在我们的服务器上使用ejabberd + mochiweb。我保持ejabberd和mochiweb运行的时间越长,消耗的内存就越多(昨晚它消耗了35%的内存。现在它已经超过了50%)。我认为这只是一个mnesia垃圾收集问题 - 所以我安装了Erlang R13B3并重新启动了ejabberd。但这并没有解决它。

所以我现在注意到,在超过50%的完全内存消耗时,看起来ejabberd开始“放开”内存并保持在50%左右。这是正常的吗? ejabberd的阈值是~50%,所以当它达到它时,它会说“嘿,实际上让一些记忆消失的时间......”并且它可能会保留其余部分以便快速访问(比如缓存mnesia?)

我感谢任何意见。谢谢!

3 个答案:

答案 0 :(得分:1)

不时在shell中运行erlang:memory().。您也可以尝试erlang:system_info(Type).allocated_areas allocator。 这些应该会告诉你什么样的内存泄漏。

您还可以设置memsup来警告您分配过多内存的进程。

答案 1 :(得分:1)

事实证明,没有内存泄漏(耶!)Ejabberd只占用了< 40MB。最后,当我看到EngineYard上的Usage Graphs时,我看到了亮点 - 实际上只使用了288MB,缓冲了550MB,缓存了175MB。我的ejabberd服务器每隔2.5秒从每个客户端更新一次,这样可以解释为什么这么多的缓冲/缓存。

感谢您的所有帮助。

答案 2 :(得分:0)

在erlang进程中新创建的原子得到从不垃圾收集。当通过从随机创建原子名称的算法注册进程时,这可能是一个问题。随机创建字符串。