gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:18:46 26 4
gpt4 key购买 nike

我在 Linux (Erlang R14B 03) 上运行 ejabberd 2.1.10 服务器。我正在使用工具批量创建 XMPP 连接并随机发送消息。ejabberd 正在接受大部分连接。尽管连接不断增加,观察到 erlang:memory(total) 的值在一个范围内。
但是如果我使用 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(total) 中。

关于memory - ejabberd:erlang和Linux进程之间的内存差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9583549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com