使用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 ...
随机推荐
- Android 高级UI设计笔记03:使用ListView实现左右滑动删除Item
1. 这里就是实现一个很简单的功能,使用ListView实现左右滑动删除Item: (1)当我们在ListView的某个Item,向左滑动显示一个删除按钮,用户点击按钮,即可以删除该项item,并且有 ...
- gitlab备份与恢复操作方法
github私有仓库是收费的,有些代码不方便托管到外面的git仓库,因此就产生了自己搭建git服务器的需求. 好在有广大的开源人士的贡献,有了gitlab这一神器. 手动配置较多,直接用集成包: bi ...
- MySQL中的保留字
本文转载自:http://www.cnblogs.com/lawdong/archive/2010/08/08/2357903.html ADD ALL ALTER ANALYZE AND AS AS ...
- [改善Java代码]优先使用整型池
建议28: 优先使用整型池 看如下代码: public class Client { public static void main(String[] args) { Scanner input = ...
- C#/.NET使用HttpWebRequest、SqlBulkCopy从API获取数据批量插入DB
小弟新手程序员一枚,代码技术和文章水平均不才.所写文章均为对自己所写所学代码的简单记录,可能对于老手程序员营养价值不高,望莫见怪. 我工作上有个需求:从某处API接口上获取数据(大约1W条而已)并插入 ...
- GD库使用小结---1
因为一开始,“大家”都说一般任务中,用php操作图片不常见,像我们这种基本业务型的,就更用不到了,所以先别看,偶就没有看.现在有机会了自然要来玩一把. 以前学过C#的GDI+,交了课程设计后忘得一干二 ...
- Linux 命令 - printenv: 打印全部或部分环境信息
命令格式 printenv [OPTION]... [VARIABLE]... 命令参数 -0, --null 以空字符而非换行符结束每一输出行. --help 显示帮助信息. --version 显 ...
- 整合Spring与Hibernate
在学习spring的时候,要整合hibernate,本来是看起来挺简单的,但是遇到的远要比想到了多,而且多很多,期间几天一个bug实在难调,几度放弃,但终究柳暗花明,抑制不住喜悦就想着分享一下成果吧. ...
- sqlserver2008 如何定时清理索引碎片
sqlserver2008 如何定时清理索引碎片 查询索引引起的表垃圾碎片sql脚本: SELECT object_name(a.object_id) [TableName] ,a.index_id ...
- OpenGL7-1-快速绘制接口(使用高效的函数接口进行绘制)
代码下载 #include "CELLWinApp.hpp"#include <gl/GLU.h>#include <assert.h>#include & ...