内存泄漏不再难:Chrome开发者工具实战教程
·
有了前面的理论基础,本篇从一个简单的内存泄漏例子开始,先掌握如何使用 Chrome 开发者工具进行内存泄漏分析。之后,讲解几个实际项目中遇到的不同类型的内存泄漏示例,让您学会如何识别和修复内存泄漏,之后再遇到类似问题能够从容面对。
一个简单的内存泄漏示例
这一个简单的示例,我们的目的主要是学习如何生成堆快照、分析内存泄漏及掌握 Chrome 开发者工具 Memory 面板各视图代表的含义。
准备一份产生内存泄漏的代码,它的逻辑很简单,触发 /trigger/memory/leak 接口后不断往外部对象 total 添加一个大数组对象,这会使得堆内存占用不断上涨,用不了多久,服务就会因为堆内存溢出而崩溃。
const http = require('http');
const v8 = require('v8');
const total = [];
http.createServer((req, res) => {
if (req.url === '/metrics') {
v8.writeHeapSnapshot();
return res.end('The heap snapshot is generated successfully');
}
if (req.url === '/trigger/memory/leak') {
setInterval(() => {
total.push(new Array(5 * 1024 * 1024));
}, 1000);
return res.end('ok');
}
}).listen(3000, () => console.log(`3000 port`));Node 环境下打开 Chrome DevTools Memory
使用 --inspect 标志位运行 node 程序,访问 http://127.0.0.1:3000 打开检查器,看到如下图所示,左上角有个 Node.js Logo 图标按钮,点击后切换到 Memory 面板。

或在 Chrome 浏览器地址栏输入 chrome://inspect 打开 Memory 面板,如下图所示:
点击
Take snapshot按钮生成堆快照。点击
Load按钮用于加载已生成的堆快照。

更多推荐


所有评论(0)