ejabberd:erlang和Linux进程之间的内存差异

时间:2012-03-06 12:17:18

标签: memory memory-leaks erlang ejabberd

我在Linux上运行ejabberd 2.1.10服务器(Erlang R14B 03)。 我正在使用批量工具创建XMPP连接并随机发送消息。 ejabberd正在接受大部分联系。 即使连接不断增加, erlang的值:内存(总)被观察到在一个范围内 但是如果我使用top命令检查ejabberd进程的内存使用情况,我可以观察到ejabberd进程的内存使用量不断增加。

我可以看到erlang:memory(total)和top命令显示的内存使用量之间的差异在不断增加。

请告诉我显示内存不同的原因。 是因为内存泄漏吗?无论如何我可以调试这个问题吗? 如果没有内存泄漏,会使用额外内存(erlang和top命令之间的差异)吗?

1 个答案:

答案 0 :(得分:2)

Erlang VM本身或ejabberd的非Erlang部分中的内存泄漏会产生您描述的效果。 ejabberd包含一些NIF - ejabberd-2.1.10中有10个“.c”文件。

你的ejabberd配置了“--enable-nif”吗? 如果是这样,请尝试与使用“--disable-nif”构建的版本进行比较,以查看它是否具有不同的内存使用行为。

调试的其他可能性包括使用Valgrind检测和定位泄漏。 (我没有尝试在Erlang VM上使用它;可能存在许多误报,但运气不错,泄漏会因尺寸或来源而突出。)

最后一点:Erlang进程的堆可能已经碎片化了。分配之间的差距将计入操作系统流程的大小;看起来它们不包含在erlang:memory(total)中。