CNode

记一次排查内存泄露问题

分享
Aassmdx发布于3 年前最后回复3 年前2 回复3446 浏览0 收藏

今天打开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)

A
assmdx#1·3 年前

App telegram群:https://t.me/chatgptappw

A
assmdx#2·3 年前

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

参与回复
登录后即可参与回复。登录