Node.js 如何调试Apollo GraphQL服务器上的内存泄漏?

Node.js 如何调试Apollo GraphQL服务器上的内存泄漏?,node.js,memory-leaks,graphql,apollo-server,Node.js,Memory Leaks,Graphql,Apollo Server,我有一个带有多个端点的graphql服务器。它基本上只是一个CRUD应用程序,所以我真的不知道为什么会出现内存泄漏。我拥有的唯一可能泄漏的端点是一个将PIC上传到S3的端点 我一直在四处寻找,并尝试拍摄堆快照并比较它们,但我甚至不确定哪一个端点是罪魁祸首。这是我一直遵循的流程: 使用--inspect标志启动服务器:nodemon--inspect--exec babel node src/index.js 在我做任何事情之前先拍一张堆快照 启动我的前端应用程序,点击我认为内存泄漏的端点(我上传

我有一个带有多个端点的graphql服务器。它基本上只是一个CRUD应用程序,所以我真的不知道为什么会出现内存泄漏。我拥有的唯一可能泄漏的端点是一个将PIC上传到S3的端点

我一直在四处寻找,并尝试拍摄堆快照并比较它们,但我甚至不确定哪一个端点是罪魁祸首。这是我一直遵循的流程:

  • 使用
    --inspect
    标志启动服务器:
    nodemon--inspect--exec babel node src/index.js
  • 在我做任何事情之前先拍一张堆快照
  • 启动我的前端应用程序,点击我认为内存泄漏的端点(我上传照片的端点)
  • 再次拍摄堆快照并比较两者
  • 这是查找内存泄漏的正确流程吗?有没有更好的方法来做到这一点,而不必猜测它来自哪个端点?是否有在线工具可以帮助我找到生产中内存泄漏的来源,而不必像这样猜测?也许是Datadog之类的

    更新:从Heroku的指标来看,每次发出请求时,内存使用似乎都会增加

    但是我的src/index.js文件没有做任何特殊的事情:

    从“阿波罗服务器”导入{ApolloServer,gql};
    从“/models”导入{connectDb,models};
    从“/schema”导入架构;
    从“/resolvers”导入解析程序;
    从“/contexts”导入上下文;
    const server=新服务器({
    typeDefs:schema,
    解析器,
    上下文:异步({req,connection})=>{
    console.log(请求主体查询);
    控制台日志(请求主体变量);
    const{getCurrentUser}=上下文;
    const currentUser=等待getCurrentUser(req);
    返回{models,currentUser};
    },
    });
    connectDb()。然后(异步()=>{
    侦听({port:process.env.port | | 4000})。然后({url})=>{
    console.log(`您可以尝试使用它来调试和分析应用程序。这是一个非常好的nodeJS工具。

    您可以使用它来检测内存泄漏的位置


    这也可能是一个已知的问题,下面是与类似问题相关的部分。

    您走的是正确的道路。我将要链接到的指南从您所采用的类似方法开始。我将链接到讨论实时监控内存的部分,当您在chrome中记录分配时间线时可用://检查


    node memwatch在最新版本的node上不起作用。我自己使用的是12+版本。您找到答案了吗,我们在图像上载和aws方面遇到了相同的问题。