node.js内存泄漏分析二
来源:互联网 发布:java飞机大战子弹 编辑:程序博客网 时间:2024/06/03 16:31
概述
在开发过程中,遇到了部分导致内存泄露的情况,本文主要是说明几种内存泄漏的问题,并简单分析一些关于内测泄漏分析的方法。
内存泄漏分析
1. 使用heapdump模块
模块介绍:https://github.com/bnoordhuis/node-heapdump
该模块主要是一个抓取当前内存的快照信息,包括所有的字符,对象和函数所占用内存的情况。
2. 分析原理
根据heapdump抓取的是当前内存的情况,那么如果存在内存泄漏的情况下,对在中间请求时刻抓取内存快照,然后再最后一个请求中抓取快照,那么再分析两者之间的区别,就可以看出内存泄漏的问题。
抓取方法可参考:
var times = 1;var heapdump = require('heapdump');/* server start */global.app = HTTP.createServer(function(req, res) { var d = D.create(); /* error catch */ d.on('error', function(err) { console.error('error, server error', err.message, err.stack); serverError(res, req, err); d.dispose(); }); d.run(function() { ROUTER.router(res, req); }); if(times == 1000 || times == 500){ heapdump.writeSnapshot('/data/danhuang/' + Date.now() + '.heapsnapshot'); } times++;})
3. chrome工具分析
抓取到内存截屏以后,使用chrome的profile功能,load两个对应的headdump文件。load成功以后再使用profile中的comparsion功能,过程如下。
4. 对比分析优化
然后再经过两个截取的内存快照的函数以及对象的对比,就可以很清晰的看出哪些函数存在泄漏,然后再进行修复。
内存泄漏结论
在做的压测时发现存在泄漏,主要包含在两个部分
log4js中的file.js使用数组无限保存对象
settimeout执行导致内存暴涨,尽量不用使用settimeout
protobuf未使用node_modules模块方法,导致每次build
1 0
- node.js内存泄漏分析二
- Node.js内存泄漏分析
- JAVA内存泄漏分析(二)
- 内存泄漏分析二-线程
- Node内存泄漏专题
- 使用MAT分析内存泄漏(二)
- 使用MAT分析内存泄漏(二)
- Android 内存泄漏和OOM分析(二)
- android 内存泄漏分析之二
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- Linux内存泄漏分析方法二使用Valgrind
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- ubuntu 16.04 L2TP
- Java中变量定义之后默认初始化的情况
- Prim最小生成树
- [Java]Calendar类
- 浅谈LCA的在线算法ST表
- node.js内存泄漏分析二
- Struts2.5.2处理json
- React组件的生命周期
- OpenCV官方文档研究(一)Mat
- 16.9.15 C组总结
- bootstrap学习心得 基础篇
- 【Java】java.util.Pattern详述
- 纯虚函数的识别
- MAC Cocos2dx新手学习路程一