使用Chrome+node-inspector查找NodeJS内存泄漏
关键字:NodeJS, 内存泄漏,node-inspector,Chrome
OS:Windows 10
本文介绍如何使用node-inspector+Chrome查找nodejs内存泄漏。
1.创建一个Express app, 参考http://www.cnblogs.com/ldlchina/p/4054974.html。
修改app.js内容如下:
//app.js
var app = require('express')();
var http = require('http').Server(app); var leakobjs = [];
function LeakClass(){
this.x = 1;
} app.get('/', function(req, res){
console.log('get /');
for(var i = 0; i < 1000; i++){
leakobjs.push(new LeakClass());
}
res.send('<h1>Hello world</h1>');
}); http.listen(3000, function(){
console.log('listening on port 3000');
});
运行cmd:”node app.js“
在Chrome里面打开页面:http://localhost:3000/。不停的刷新给页面,nodejs的内存将不停的增长。
2.安装使用node-inspector来调试后台程序。请参考http://www.cnblogs.com/ldlchina/p/3551277.html。
运行cmd: "node --debug app.js"。
运行cmd: "node-inspector"。
3.在Chrome里面打开http://127.0.0.1:8080/debug?port=5858, 如下图:

4.选择”Profiles“标签,选择”Take Heap Snapshot“,点击”Take Snapshot“。如下图

5.打开一个新的Chrome页面,运行http://localhost:3000/。
6.再次选择”Profiles“标签,选择”Take Heap Snapshot“,点击”Take Snapshot“。
选择Comparison,你将看到”LeakClass“导致了内存的增长,如下图。这样我们可以检查代码中关于LeakClass的部分,经验告诉我们要避免不限制的增长数组,否则在大访问量的情况下内存会耗光。

内存泄露定位工具
现在已经有许多好用且不断增强的工具用于定位Node.js应用的内存泄露。下面是其中的一些:
- https://github.com/lloyd/node-memwatch。注:如果”node install memwatch“安装失败,那就试试”node install memwatch-next“
- Jimb Esser的node-mtrace,它使用了GCC的mtrace工具来分析堆的使用。
- Dave Pacheco的node-heap-dump对V8的堆抓取了一张快照并把所有的东西序列化进一个巨大的JSON文件。它还包含了一些分析研究快照结果的JavaScript工具。
- Danny Coates的v8-profiler和node-inspector提供了绑定在Node中的V8分析器和一个基于WebKit Web Inspector的debug界面。
更多内容请参考:
Memory leak patterns in JavaScript。
使用Chrome+node-inspector查找NodeJS内存泄漏的更多相关文章
- 快捷使用Node Inspector调试NodeJS
一:介绍 NodeJS开发有很多种调试方式,比如输出Log.WebStorm自带的调试器.Node Inspector等,其中Node Inspector是比较流行和被推荐的一种. 但是Node In ...
- 搞不定 NodeJS 内存泄漏?先从了解垃圾回收开始
通常来说,内存管理有两种方式,一种是手动管理,一种是自动管理. 手动管理需要开发者自己管理内存,什么时候申请内存空间,什么时候释放都需要小心处理,否则容易形成内存泄漏和指针乱飞的局面.C 语言开发是典 ...
- 【linux】linux下对java程序生成dump文件,并使用IBM Heap Analyzer进行分析,查找定位内存泄漏的问题代码
1.首先,java程序启动在linux,怎么生成dump文件? 1>第一步,首先你需要得到java程序的PID,最简单的方法使用如下命令 ps -ef|grep java 或者如果是docker ...
- 查找openssl内存泄漏(代码)
#include <stdio.h> #include <string.h> #include <openssl/bio.h> #include <opens ...
- nodejs 内存泄漏
This looks OK at first glance. We could think that theThing get's overwritten with every invocation ...
- 轻松排查线上Node内存泄漏问题
I. 三种比较典型的内存泄漏 一. 闭包引用导致的泄漏 这段代码已经在很多讲解内存泄漏的地方引用了,非常经典,所以拿出来作为第一个例子,以下是泄漏代码: 'use strict'; const exp ...
- Chrome 浏览器垃圾回收机制与内存泄漏分析
Chorme 浏览器中的垃圾回收和内存泄漏 垃圾回收 通常情况下,垃圾数据回收分为手动回收和自动回收两种策略. 手动回收策略,何时分配内存.何时销毁内存都是由代码控制的. 自动回收策略,产生的垃圾数据 ...
- Java内存泄漏分析与解决方案
Java内存泄漏是每个Java程序员都会遇到的问题,程序在本地运行一切正常,可是布署到远端就会出现内存无限制的增长,最后系统瘫痪,那么如何最快最好的检测程序的稳定性,防止系统崩盘,作者用自已的亲身经历 ...
- 【转】如何使用MAT分析内存泄漏
原文链接:http://www.lightskystreet.com/2015/09/01/mat_usage/ MAT - Memory Analyzer Tool 使用进阶 Sep 1, 2015 ...
随机推荐
- 使用JS制作一个鼠标可拖的DIV(二)——限制区域移动
这次是要对上一篇的内容进行扩展. 由于需要对可拖动的 DIV 进行一个区域范围的限制,所以要给于一个容器,让可拖动的 DIV 元素不能逃出该容器的大小范围. 一.思路 1.在外层增加一个 DIV 容器 ...
- 通过 Session 操纵对象
Session 接口是 Hibernate 向应用程序提供的操纵数据库的最主要的接口, 它提供了基本的保存, 更新, 删除和加载 Java 对象的方法. Session 具有一个缓存, 位于缓存中的对 ...
- I2C驱动程序
i2c_add_driver i2c_register_driver driver->driver.bus = &i2c_bus_type; driver_register(&d ...
- VS操作Sqlite数据库
如果你下载的Sqlite是不带bundle的版本,那还要把这个SQLite.Interop.dll复制到debug执行文件夹下才能执行.
- 织梦dedecms源码安装方法
织梦dedecms源码安装方法 第一步: 上传所有文件到空间 注意:(由于有很多人反应安装后首页样式都乱的,所以强烈要求安装到根目录,如:127.0.0.1 / www.xxx.com,或者二级域名也 ...
- 《JavaScript模式》读书笔记
简介 在软件开发过程中,模式是指一个通用问题的解决方案.一个模式不仅仅是一个可以用来复制粘贴的代码解决方案,更多地是提供了一个更好的实践经验.有用的抽象化表示和解决一类问题的模板. 对象有两大类: 本 ...
- 安装SqlServer2008时相关问题
在安装SqlServer2008时,安装程序支持规则,老提示重启计算机 1,运行 regedit 打开注册表编辑器. 2,依次展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentCo ...
- CXF(2.7.10) - RESTful Services
1. 定义 JavaBean.注意 @XmlRootElement 注解,作用是将 JavaBean 映射成 XML 元素. package com.huey.demo.bean; import ja ...
- android doc 本地文档加载慢的解决办法
从来都是FQ上谷歌官网查文档,但是有时没办法FQ,就得用sdk本地的doc文档了,由于文档内部的一些javascript,font等也需要访问Google来加载,导致了打开本地网页也巨慢无比,甚至转了 ...
- AIDL简单使用
1.AIDL定义 AIDL是android interface definition language的缩写,它对android IPC组件Binder进行了封装.使用它不需理会底层IPC的实现,只需 ...