Node.js应用CPU占用高,如何调试

发布于 2022-08-26 18:08:18 字数 141 浏览 11 评论 0

我写了一个Node.js应用(TCP网络服务,不是网站),CPU占用达到类似功能C语言程序的十多倍。

有什么工具可以看到CPU都消耗在什么地方呢?比如说,每个函数调用了多少次、花费多长时间,有多少setTimeout和setInterval等待运行。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

荒芜了季节 2022-09-02 18:08:18

经过仔细检查,发现是程序内有死循环。调试的方法就是简单的插入console.log

// private method entry_expiry
Cache.prototype.entry_expiry = function Cache_entry_expiry(key) {
  var now = Date.now();
  var entry = this.T[key];
  if (now >= entry._expiry) {
    delete this.T[key];
  } else {
    setTimeout(this.entry_expiry.bind(this, key), entry._expiry - now);
  }
};

其中的var now = Date.now();之前不慎写成var now = Date.now;
Date.now转换成数字是NaN,造成now >= entry._expiry永远是false
setTimeout(fn,NaN)等同于setTimeout(fn,0),导致程序死循环。

述情 2022-09-02 18:08:18

console.log()太暴力了,而且效率很低,需要用cpu profile去定位奥

参考Node.js 性能优化的基本方法与实战, 里面有完整的方法论与实战, 对你有用的话点个赞奥

兰花执着 2022-09-02 18:08:18

pm2 可以满足到文件..
https://github.com/Unitech/pm2

至于要到函数的话,就要用的V8Profiler 了,不过这个有点难用...

http://code.google.com/p/v8/wiki/V8Profiler

参考一下这个吧...
https://github.com/cnodejs/nodeclub/wiki/入门知识概览

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文