后端应用程序消耗了所有RAM,但未发现内存泄漏

问题描述 投票:0回答:1

我最近将 NestJS 后端应用程序部署到 Render,并且我提到在我的服务一段时间后,所有可用的 RAM 都消失了。

它可以正常工作相当长的一段时间,消耗不超过 500mb 的 RAM,这是我期望看到的,但随后发生了一些事情,内存开始泄漏。

top
说我的节点进程正在使用 1.4g 内存:

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                              
     60 render    20   0 2883236   1.4g  56492 S   0.3   2.3  17:27.66 node

但是后来我用

--inspect
标志开始我的应用程序来制作堆快照,令人惊讶的是它显示堆大小只有 65 MB,而顶部显示
1.4g
:

我还在 VSCode 调试器扩展中看到:

我认为 puppeteer 可能是一个问题,所以我通过 PID 从顶部输出杀死了每个 chrome 进程,它只释放了大约 80mb 的 RAM。这里可能是什么问题以及为什么我的 RAM 使用率如此之高?

node.js docker memory-leaks nestjs
1个回答
0
投票

不知道你开发的是什么类型的项目,但是最近我的一个上传文件的系统也出现了内存泄漏的问题。

首先,要找出导致内存泄漏的原因,您需要监视 API 中调用的哪个请求导致此问题,并调试和分析项目的代码。

我注意到您正在使用 NodeJs

--inspect
标志进行分析,尝试按
Retained Size
列进行降序排序并开始分析每个数组内的内容,可能有数组或对象可能指向已安装的某些库在您的项目中,这可能会导致内存泄漏,无法让您执行调试。

我遇到的问题是

mongoose
库,在我的代码中的某个时刻,需要打开与数据库的连接,但它没有被关闭。也可能导致内存泄漏的是文件的
Blob
Buffer
,在我的例子中,我必须在完成上传并结束使用
Buffer
的流的读/写操作时删除
Blob
.

我无法告诉你你的项目中可能存在什么问题,但确实有必要进行调试和代码分析。

© www.soinside.com 2019 - 2024. All rights reserved.