专职C++

不能停止的脚步

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  155 Posts :: 7 Stories :: 135 Comments :: 0 Trackbacks

常用链接

留言簿(13)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

60天内阅读排行

在使用appium的过程中,发现有内存泄露,最后就process out of memory了,就挂了
网上用使用增加运行内存的方式(还是抗不住),没办法,就只好找出内存泄露的地方了
对node.js很多文章,都是说用memwatch,结果发现,这个是一个死项目,有四年没有更新过了,在现有的环境下,是没有办法编译的。
然后又有一个memwatch-next,顾名思义,就是memwatch的下一个版本,结果是果然也可以编译,一些事件也支持,但是要headdump后要end后,就挂了。
国内,也只有这么多了,用百度,你一万年都别想解决问题,估计找成人不宜的东西,百度世界第一名,google也不比过百度
只好翻出去,有人说到node-headdump,然后,就可以用了。
首先它有C++的部分,所以需要安装C++编译环境  
1.安装node-gpy
cmd>npm install -g node-gyp
2.安装python 2.7.x 
安装过程,默认就可以了
如果你有装多个python,如3.x,运行的时候,需要指定python 2.7
cmd>node-gyp --python /path/to/python2.7
然后配置python环境
cmd>npm config set python python2.7
强烈要求,不要用3.x,只用2.7.x就可以了  
为什么?因为2.7.x比3.x成熟,另外3.x和2.x差别太大了,很难兼容。
3.安装windows编译工具
在windows的cmd下(需管理员权限)
npm install --global --production windows-build-tools
4.安装C++编译器
有两个选择,
一个是Visual C++ Build Tools ,地址:http://landinghub.visualstudio.com/visual-cpp-build-tools
这是一个独立的编译和库(有2015,2017两个版本,随便选一个,我建议2015,因为2017还不知道有什么问题)
另一个是安装vs2015 最新版本是vs2015 up3了  用搜索一下,就可以找到安装文件
安装完成后,配置环境:
cmd>npm config set msvs_version 2015
有了上面四步:node-heapdump的编译环境就OK了
5.安装node-heapdump
在你项目所在目录,执行命令
cmd>npm install heapdump
我的环境是node 6.9.x 所以用最新版本就可以了
下面,我们就来使用heapdump
首先引用heapdump
import heapdump from "heapdump";

function showMemory() {
    function f(v) {
        if (v < 1024) return v.toString(10);
        else if (v < 1048576) {   //1M
            return (v / 1024).toFixed(2) + "KB";
        }
        else if (v < 1073741824) //1M
        {
            return (v / 1048576).toFixed(2) + "MB";
        }
        else {
            return (v / 1073741824).toFixed(2) + "GB";  //1G
        }
    }
    {
        //打印并显示当前堆的情况 可以去掉这个部分
        let d = process.memoryUsage();
        let strRss = f(d.rss);
        let strheapTotal = f(d.heapTotal);
        let strheapUsed = f(d.heapUsed);
        let strDate = new Date().toLocaleString();
        console.log(`memory: ${strDate}: rss:${strRss}, heapTotal:${strheapTotal}, heapUsed:${strheapUsed}`, );
    }
    heapdump.writeSnapshot('d:/tmp/dump/' + Date.now() + '.heapsnapshot');  //堆快照必须.heapsnapshot,否则在后面使用chrome的时候,会报错。
}

setInterval(showMemory, 5000);  //这里设定了,每5秒打印一次。

然后就可以运行了。
在得到很多heapsnapshot后,再用chrome浏览器,按F12,进入开发模式
然后如下图所示操作,将相邻的几个快照依次加载
加载后,处理方式有四种,分别是summary,comparison,cotainment,statistics,这里,我选择comparison,就能看到当前内存快照和上一个内存快照的差异。
posted on 2017-02-23 14:28 冬瓜 阅读(963) 评论(0)  编辑 收藏 引用 所属分类: appiumjavascript

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理