在开发过程中,遇到了部分导致内存泄露的情况,本文主要是说明几种内存泄漏的问题,并简单分析一些关于内测泄漏分析的方法。
模块介绍:
该模块主要是一个抓取当前内存的快照信息,包括所有的字符,对象和函数所占用内存的情况。
根据 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++;
- })
抓取到内存截屏以后,使用 chrome 的 profile 功能,load 两个对应的 headdump 文件。load 成功以后再使用 profile 中的 comparsion 功能,过程如下。
然后再经过两个截取的内存快照的函数以及对象的对比,就可以很清晰的看出哪些函数存在泄漏,然后再进行修复。
在做的压测时发现存在泄漏,主要包含在两个部分
来源: http://lib.csdn.net/article/nodejs/47226