前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >node.js内存泄漏分析二

node.js内存泄漏分析二

作者头像
蛋未明
发布2018-06-07 15:50:23
1.1K0
发布2018-06-07 15:50:23
举报
文章被收录于专栏:蛋未明的专栏蛋未明的专栏

概述

在开发过程中,遇到了部分导致内存泄露的情况,本文主要是说明几种内存泄漏的问题,并简单分析一些关于内测泄漏分析的方法。

内存泄漏分析

1. 使用heapdump模块

模块介绍:https://github.com/bnoordhuis/node-heapdump

该模块主要是一个抓取当前内存的快照信息,包括所有的字符,对象和函数所占用内存的情况。

2. 分析原理

根据heapdump抓取的是当前内存的情况,那么如果存在内存泄漏的情况下,对在中间请求时刻抓取内存快照,然后再最后一个请求中抓取快照,那么再分析两者之间的区别,就可以看出内存泄漏的问题。

抓取方法可参考:

代码语言:javascript
复制
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. 对比分析优化

然后再经过两个截取的内存快照的函数以及对象的对比,就可以很清晰的看出哪些函数存在泄漏,然后再进行修复。

内存泄漏结论

在做的压测时发现存在泄漏,主要包含在两个部分

  1. log4js中的file.js使用数组无限保存对象
  2. settimeout执行导致内存暴涨,尽量不用使用settimeout
  3. protobuf未使用node_modules模块方法,导致每次build
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年09月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 内存泄漏分析
    • 1. 使用heapdump模块
      • 2. 分析原理
        • 3. chrome工具分析
          • 4. 对比分析优化
          • 内存泄漏结论
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档