记一次排查内存泄露问题
今天打开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: