【问题标题】:Chrome "Take Heap Snapshot" never completesChrome“获取堆快照”从未完成
【发布时间】:2018-01-10 02:05:38
【问题描述】:

总结:

我正在尝试使用 Chrome 的“获取堆快照”来追踪某些 node.js 代码中的内存泄漏,但获取快照的行为从未完成。

我是否以某种方式误用了该工具?

详情:

这是 node.js 应用程序:

#!/usr/bin/env node

var serialserver = require('./p5.serialserver');
serialserver.start();
console.log("p5.serialserver is running");

这是我调用它的方式,以及它打印出来的内容:

$ node --inspect ./p5serial
Debugger listening on port 9229.
Warning: This is an experimental feature and could change at any time.
To start debugging, open the following URL in Chrome:
     chrome-devtools://devtools/remote/serve_file/@521e5b7e2b7cc66b4006a8a54cb9c4e57494a5ef/inspector.html?experiments=true&v8only=true&ws=localhost:9229/node
p5.serialserver is running

在 OSX 10.12.6 (Sierra) 下运行的 Chrome(版本 59.0.3071.115)中,我打开给定的 URL 并单击 Take Heap Snapshot。我看到左栏中的图标显示:

Snapshot 1
Snapshotting...

...但是等了十分钟后,快照还没有完成。这不是一个特别大的节点应用程序。

我错过了什么?

【问题讨论】:

标签: node.js google-chrome memory-leaks google-chrome-devtools


【解决方案1】:

我能够成功拍摄以下内容的堆快照:

const http = require('http');
const port = 3000;

const requestHandler = (request, response) => {  
  console.log(request.url);
  response.end(`you requested ${request.url}`);
};

const server = http.createServer(requestHandler);

server.listen(port, (err) => {  
  if (err) {
    return console.log('something bad happened', err);
  }

  console.log(`server is listening on ${port}`);
});

通过node --inspect server.js调用

版本信息:

  • macOS Sierra 10.12.6
  • Chrome 62.0.3174.0(官方版本)金丝雀(64 位)

尝试下载Chrome Canary,看看问题是否在最新版本的 Chrome 中得到解决。

如果没有,那么这个串行服务器可能有问题。是您构建的,还是一个库?

【讨论】:

  • Chrome Canary 立即捕获快照。我将切换回使用它 - 感谢您的建议。
猜你喜欢
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 2017-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多