【问题标题】:ejabberd: Memory difference between erlang and Linux processejabberd:erlang和Linux进程之间的内存差异
【发布时间】:2012-03-22 17:36:34
【问题描述】:

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

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

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

【问题讨论】:

    标签: memory memory-leaks erlang ejabberd


    【解决方案1】:

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

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

    调试的其他可能性包括使用 Valgrind 检测和定位泄漏。 (我没有尝试在 Erlang VM 上使用它;可能会出现一些误报,但如果运气好的话,无论是大小还是来源,泄漏都会脱颖而出。)

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

    【讨论】:

      猜你喜欢
      • 2011-09-29
      • 2010-10-29
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      • 2022-10-16
      • 2013-10-25
      • 2014-12-23
      相关资源
      最近更新 更多