gpt4 book ai didi

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

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

我有一个带有多个端点的 graphql 服务器。它基本上只是一个 CRUD 应用程序,所以老实说我不确定为什么会出现内存泄漏。我唯一可能会泄漏的端点是将图片上传到 S3 的端点。

我一直在环顾四周,并尝试拍摄堆快照并进行比较,但我什至不确定哪个端点是罪魁祸首。这是我一直在关注的流程:

  • 使用 --inspect 启动服务器标志:nodemon --inspect --exec babel-node src/index.js
  • 在我做任何事情之前先拍一张堆快照
  • 启动我的前端应用程序并点击我认为存在内存泄漏的端点(我上传照片的端点)
  • 再次拍摄堆快照并比较两者

  • 这是查找内存泄漏的正确流程吗?有没有更好的方法来做到这一点而不必猜测它来自哪个端点?是否有我可以在线使用的工具可以帮助我找到生产中内存泄漏的来源,而不必像这样猜测?也许像Datadog之类的东西?

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

    enter image description here

    但是我的 src/index.js 文件没有做任何特别的事情:
    import { ApolloServer, gql } from "apollo-server";
    import { connectDb, models } from "./models";

    import schema from "./schema";
    import resolvers from "./resolvers";
    import contexts from "./contexts";

    const server = new ApolloServer({
    typeDefs: schema,
    resolvers,
    context: async ({ req, connection }) => {
    console.log(req.body.query);
    console.log(req.body.variables);

    const { getCurrentUser } = contexts;

    const currentUser = await getCurrentUser(req);
    return { models, currentUser };
    },
    });

    connectDb().then(async () => {
    server.listen({ port: process.env.PORT || 4000 }).then(({ url }) => {
    console.log(`🚀 Server ready at ${url}`);
    });
    });

    最佳答案

    你走在正确的道路上。我将要链接到的指南首先遵循与您采用的方法类似的方法。我将链接到讨论实时监控内存的部分,您可以在 Record allocation timeline 时找到该部分。在 chrome://inspect

    https://marmelab.com/blog/2018/04/03/how-to-track-and-fix-memory-leak-with-nodejs.html#watching-memory-allocation-in-real-time

    关于node.js - 如何调试 Apollo GraphQL 服务器上的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58897099/

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