手动安装 node-heapdump 进行内存泄露检测
Contents
Windows 7 x64 系统, node.js v0.12.2,Visual Studio 2013 Community
npm/cnpm 安装皆报错,貌似是由于工作文件是2010格式的,尝试配置 node-gyp 使用2013 版本,失败!
最后没办法,把 node-heapdump 下载到本地手动进行安装。有些包可能依赖 windows SDK,这里是下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=8279
|
|
克隆到本地,进入,执行build,接着报错!build 是会自动生成对应平台的工程文件再调用相关的生成工具进行 build 。关键就是使用 msbuild 的时候会出错。
接下来就是用 vs2013 打开 build 下面的 sln 文件,会提示升级,升完级编译一下就OK了。
编译过程中可能会提示找不到 node.lib,这是由于引用路径错误引起的,可以右击项目 properties -> Linker -> Input,把 Additional Dependencies 中的
kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;"C:\Users\Administrator\.node-gyp.12.2$(Configuration)node.lib"
改成
kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;"C:\Users\Administrator\.node-gyp.12.2$(Platform)node.lib"
完成后打开命令行进入到 node-heapdump 目录,执行:
npm install . -g
把它安装到全局是因为一般情况下不需要引用到这个包,偶尔调试的时候才需要 require ,放在全局即可。键入以下命令查看 npm 全局包的存放位置:
npm config list
回显的 prefix 就是全局包的目录
为了能在有需要的地方可以 require 到全局包,我们还需要为系统添加一个 NODE_PATH 环境变量,以便在任何地方都可以加载这个包。
计算机=》属性=》高级系统设置=》环境变量=》新建=》NODE_PATH
把上面查到的包位置放入这个变量,现在在任意位置都可以 require(‘heapdump’)。
heapdump用来检测内存泄露的,一般需要观察到内存增长才进行 dump 操作。建议的做法是在目标脚本上开一个 repl socket 服务端口,在我们需要时候就 telnet 到这个商品,执行 heapdump。
// telnet 调试 require('net').createServer(function(socket) { require('repl').start('myapp>', socket); }).listen(3001, 'localhost');
windows 7 自带的 telnet 是坨大便,建议使用 cygwin 的 telnet 程序,需要安装 inetutils 才有。
$ telnet localhost 3001 myapp> require('heapdump').writeSnapshot()
完成后按 Ctrl + ] 结束会话。
使用 Chrome F12 打开 developer toolbar 在 profiles 点击 load 就可以加载查看内存快照。
Author Klesh Wong
LastMod 2015-05-20