我有一个带有多个端点的graphql服务器。它基本上只是一个CRUD应用程序,所以说实话我不确定为什么会有内存泄漏。我唯一可能存在泄漏的端点是将图片上传到S3的端点。
我一直在四处张望,并尝试拍摄堆快照并进行比较,但我什至不知道哪个端点是罪魁祸首。这是我一直遵循的流程:
- 使用
--inspect
标志启动服务器:nodemon --inspect --exec babel-node src/index.js
- 在执行任何操作之前先进行堆快照
- 启动我的前端应用并点击我认为存在内存泄漏的端点(我上传照片的端点)
- 再次拍摄一个堆快照并比较两者
这是查找内存泄漏的正确流程吗?是否有更好的方法来执行此操作而不必猜测它来自哪个端点?也许我可以在线使用一些工具来帮助我找到生产中内存泄漏的根源,而不必这样猜测?也许像Datadog之类的东西?
更新:从Heroku的指标来看,似乎每次发出请求时内存使用量都会增加吗?
但是我的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}`);
});
});