调试快速应用程序中的内存泄漏

Posted

技术标签:

【中文标题】调试快速应用程序中的内存泄漏【英文标题】:Debugging memory leak in express application 【发布时间】:2021-04-01 18:50:11 【问题描述】:

我的 express 应用程序中存在内存泄漏。 RSS 内存从大约 80Mb 开始,随着时间的推移缓慢增长,在几天内达到 2-3Gb 左右。我尝试使用 --inspect 标志启动进程并在 chrome 检查器中进行调试,但无法找出确切的问题。在这种情况下,一段时间内的对象分配并不高。正如所附屏幕截图中所见,最高的内存消耗是字符串。谁能指出我修复这个漏洞的正确方向?

我还附上了 RSS 图。内存下降是由于关闭了服务器。

平台:Linux - Ubuntu 18.04.5

【问题讨论】:

您可以分享您的代码的任何机会,例如通过github? @eol 不幸的是,我无法分享源代码。这是一个生产应用程序。 您的 javascript 进程似乎不会导致泄漏(如果第一张图片实际上显示了之前和之后的屏幕截图)。您是否在控制台中打印某些内容?由于打开开发人员工具时,所有控制台输出都将保存在内存中。这可能是一个潜在的原因。关闭开发者工具应该会释放所有内存。 @WolverinDEV 肯定有很多日志记录已完成,但我怀疑这与内存泄漏有关。堆转储在一段时间内变化不大。 RSS 显着增长。我读了几篇文章,发现这更像是内存膨胀而不是内存泄漏。 @AdityaVarma 好吧,我也做了,但实际上在我的应用程序中出现了问题(我的行为完全相同)。您可以尝试禁用日志记录并仔细查看。 RSS 的显着增加可能是内存膨胀/碎片化,但经验不足的 JS 非常清楚这一点。你在使用任何原生模块吗? 【参考方案1】:

嗯,这是一个本机模块sharp 泄漏内存。它在应用程序中用于图像处理。我们需要使用libjemalloc 运行应用程序,这样可以更好地将未使用的内存释放回操作系统。我们可以使用以下命令设置内存分配器:

LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.1

【讨论】:

以上是关于调试快速应用程序中的内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JVM 上调试本机内存中的泄漏?

使用kbmMW调试内存泄漏

iphone App中的内存泄漏

Linux如何调试内存泄漏

Linux如何调试内存泄漏

带有线程的 MFC 应用程序中的内存泄漏