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

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

我一直在四处张望,并尝试拍摄堆快照并进行比较,但我什至不知道哪个端点是罪魁祸首。这是我一直遵循的流程:

  1. 使用--inspect标志启动服务器:nodemon --inspect --exec babel-node src/index.js
  2. 在执行任何操作之前先进行堆快照
  3. 启动我的前端应用并点击我认为存在内存泄漏的端点(我上传照片的端点)
  4. 再次拍摄一个堆快照并比较两者

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

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

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

但是我的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}`);
  });
});
zhanggang1496 回答:如何调试Apollo GraphQL服务器上的内存泄漏?

您在正确的道路上。我将要链接的指南是从与您所采取的方法类似的方法开始的。我将链接到有关实时监视内存的部分,当您在chrome:// inspect

Record allocation timeline时可以使用该部分。

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

,

您可以尝试使用clinic来调试和分析应用程序。对于nodeJS来说,它是一个非常好的工具。

,

您可以使用node-memwatch来检测内存泄漏在哪里。

这也可能是一个已知问题,这里是link,存在类似问题。

本文链接:https://www.f2er.com/3087866.html

大家都在问