记一次排查内存泄露问题
发布于 2 年前 作者 assmdx 2719 次浏览 来自 分享

今天打开App突然发现请求全部报错,看了眼服务器发现CPU负载100%,监控内存曲线一直上涨,推测是内存泄露问题, 在代码中加入以下代码:

import v8 from 'node:v8'

process.on('warning', e => console.warn(e.stack))

process.on('SIGUSR2', () => {
  const fileName = v8.writeHeapSnapshot();
  console.log(`Created heapdump file: ${fileName}`);
})

在服务器上新启一个服务,端口换成8999, 启动新服务后,执行

kill -SIGUSR2 11044 // 新服务的pid

打一个测试包,服务器端口换成新服务的8999,不停发请求, 然后执行

kill -SIGUSR2 11044 // 新服务的pid

抓取到新的内存快照。

将两个内存快照下载到本地,用chrome dev tools/ Memory Load进去,对比发现依赖的某个包吃了很多内存 image.png 在网上搜,果然发现这个依赖包是有问题的 https://pullanswer.com/questions/always-meet-error-from-atdqbd-tiktoken-and-cause-memory-leak 按教程修改后,memory leak消失: image.png

最后,欢迎大家下载体验我开发的App ChatGPT客户端/文丑App: image.png

2 回复

相对于C/C++来说,node.js的内存泄露排查还是比较费劲的,符号很难对应上

回到顶部