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

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

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

请告诉我内存显示差异的原因。这是否是由于内存泄漏引起的?我有没有办法调试此问题?如果不是内存泄漏,那么额外的内存 (erlang 和 top 命令之间的差异) 用于什么?

1个回答

2
Erlang VM本身或ejabberd的非Erlang部分中的内存泄漏会导致您所描述的效果。ejabberd包含一些NIFs-在ejabberd-2.1.10中有10个".c"文件。
您的ejabberd是否配置为“--enable-nif”?如果是,请尝试使用“--disable-nif”构建的版本进行比较,以查看其是否具有不同的内存使用行为。
调试的其他可能性包括使用Valgrind来检测和定位泄漏。(我没有尝试在Erlang VM上使用它;可能会有许多误报,但幸运的是,泄漏要么通过大小或来源显眼。)
最后注意:Erlang进程的堆可能已经碎片化。分配之间的空隙将计入操作系统进程的大小;erlang:memory(total)似乎不包括它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接