node.js - 在我的 Node.js 应用程序中查找内存泄漏
问题描述
监控我的 node.js 应用程序显示我的 RAM 消耗量正在增加。
所以我开始研究代码并进行多次测试,但我不知道如何纠正这些泄漏以及它们的确切来源。
为了测试和查看内存泄漏,我正在运行我的应用程序
node --expose-gc --inspect index.js
在我的 index.js 中:
setInterval(() => {
// 1. Force garbage collection every time this function is called
try {
global.gc();
} catch (e) {
console.log("You must run program with 'node --expose-gc index.js' or 'npm start'");
process.exit();
}
const { rss, heapUsed, heapTotal } = process.memoryUsage();
console.log(
'rss',
numeral(rss).format('0.0 ib'),
'heapUsed',
numeral(heapUsed).format('0.0 ib'),
'heapTotal',
numeral(heapTotal).format('0.0 ib'),
);
}, 5000);
在我的应用程序 终端堆屏幕截图上执行任何操作后,我可以清楚地看到堆在增长
使用节点检查器,我截取多个屏幕截图并进行比较,但我没有看到任何与我自己的代码相关的内容(内存泄漏似乎来自 moment.js(我的代码中没有任何称为“猜测”的内容)) . 就像我所有的泄漏都来自依赖项一样(我做到了yarn upgrade --latest
)
如果有人可以查看我的 3 个堆快照以帮助我找出内存泄漏的来源,那真的会对我有所帮助
解决方案
推荐阅读
- mysql - 如何使用vb将Combobox和checklistbox保存到mysql php中
- android - How should I share Activity related code between multiple activities?
- python - 可视化光密流
- python - 在python中使用for和if循环实现匹配条件
- wso2 - 用户在计费引擎中注册后的回调(WSO2 Api Manager)
- arrays - 数组公式仅适用于第一个单元格
- sql-server - sqlcmd 适用于 CMD 而不是 bash
- apache-spark - 为什么在增加 memoryOverhead 后收集大型数据集会成功
- firebase - signInAnonymously 是否将记录添加到您的用户集合中?
- javascript - 有没有办法让我从我用 JavaScript 制作的兴趣计算器中获取用户输入并将其自动添加到我的 chartjs 数据集中?