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

Memory ejabberd:erlang和Linux进程之间的内存差异,memory,memory-leaks,erlang,ejabberd,Memory,Memory Leaks,Erlang,Ejabberd,我正在Linux(Erlang R14B 03)上运行ejabberd 2.1.10服务器。 我正在使用一个工具批量创建XMPP连接,并随机发送消息。 ejabberd正在接受大部分连接。 尽管联系不断增加, erlang的值:观察到内存(总数)在一定范围内。 但是如果我使用top命令检查ejabberd进程的内存使用情况,我可以观察到ejabberd进程的内存使用情况在不断增加 我可以看到erlang:memory(total)的值和top命令显示的内存使用率之间的差异在不断增加 请让我知道显

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

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

请让我知道显示的内存差异的原因。 是因为内存泄漏吗?我可以调试这个问题吗?
如果不是内存泄漏,那么使用额外内存(erlang和top命令之间的差异)的原因是什么?

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

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

调试的其他可能性包括使用Valgrind检测和定位泄漏。(我还没有尝试在Erlang VM上使用它;可能会有一些误报,但幸运的是,无论是从大小还是从来源来看,泄漏都会突出。)

最后一点注意:Erlang进程的堆可能已经被分割。分配之间的差距将计入操作系统进程的大小;看起来它们不包括在erlang:memory(总计)中