2

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

所以我现在注意到,在完全内存消耗的 50% 以上时,看起来 ejabberd 开始“释放”内存并保持在 50% 左右。这是正常的吗?约 50% 是 ejabberd 的阈值吗,所以当它达到它时,它会说,“嘿,是时候让一些内存消失了……”也许它会保留其余部分以便快速访问(比如缓存 mnesia?)

我很感激任何意见。谢谢!

4

3 回答 3

1

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

感谢您所有的帮助。

于 2009-12-09T19:09:06.913 回答
1

erlang:memory().时不时地在你的 shell 中运行。您也可以尝试erlang:system_info(Type).一下。这些应该给你一个关于哪种内存泄漏的提示。allocated_areasallocator

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

于 2009-12-06T09:48:11.677 回答
0

erlang 进程中新创建的原子永远不会被垃圾收集。当进程由从随机创建原子名称的算法注册时,这可能是一个问题,例如。随机创建的字符串。

于 2009-12-06T10:14:54.947 回答