记一次排查内存泄露问题
发布于 2 年前 作者 assmdx 3245 次预览 最后一次回复是 2 年前 来自 分享
今天打开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进去,对比发现依赖的某个包吃了很多内存
在网上搜,果然发现这个依赖包是有问题的
https://pullanswer.com/questions/always-meet-error-from-atdqbd-tiktoken-and-cause-memory-leak
按教程修改后,memory leak消失:
最后,欢迎大家下载体验我开发的App ChatGPT客户端/文丑App:

2 回复
App telegram群:https://t.me/chatgptappw
相对于C/C++来说,node.js的内存泄露排查还是比较费劲的,符号很难对应上