使用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 ...
随机推荐
- CSS完成三角形
通过设置div的border属性,来实现! 将div的height和width属性分别设置为0px,将4边的border值设置为一样的宽度,通过调节边框的颜色课看到效果. <style> ...
- Linux下的权限掩码umask
权限掩码umask 我们都知道在linux下创建一个文件或者目录之后是可以通过chmod等命令进行权限设置,来达到给当前用户.用户组用户以及其他用户分配不同的访问权限.那么,我们新创建的目录和文件本身 ...
- mysql 修改 character_set_database 编码格式
操作系统:win10 x64 Server version : 5.5.46 MySQL Community Server (GPL) mysql 修改 character_set_database ...
- Ubuntu系统下常用的新建、删除、拷贝文件命令
我们在Ubuntu系统中安装程序时,经常要在usr目录下新建.拷贝文件,此文件夹在Linux类系统中需要root权限才能访问,因此用常规的鼠标右键菜单操作是无效的,今天分享一下在终端中使用命令新建.拷 ...
- CSS之导航菜单
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Servlet之过滤器
Servlet的介绍: Servlet API 中定义了三个接口类来开供开发人员编写 Filter 程序:Filter, FilterChain, FilterConfig Filter 程序是一个实 ...
- Android应用源码基于安卓的校园二手交易系统客户端+服务端+数据库
该源码是校园二手交易系统应用带服务端,也是一个基于安卓和javaweb的校园二手交易系统,包括整套安卓客户端.javaweb服务端.mysql数据库,可以进行基本的列表显示帖子.显示帖子详情.用户注册 ...
- asp.net中webservice与android的json数据交互方式设置
一 .服务器端设置 1.修改web.config 在web.config里面的的system.Web节点添加 <webServices> <protocols> <add ...
- Emmet的高级功能与使用技巧
Emmet系列教程 前端开发利器Emmet的介绍 Emmet快速编写HTML代码 Emmet快速编写CSS样式 Emmet快速编写CSS样式 编写好HTML和CSS代码时,我们也需要修改或添加一些内容 ...
- UIView中常见的方法总结
addSubview: 添加一个子视图到接收者并让它在最上面显示出来.- (void)addSubview:(UIView *)view[讨论]这方法同样设置了接收者为下一个视图响应对象.接收者保留视 ...