如何找出Node.js服务器CPU 100%的原因?

如何找出Node.js服务器CPU 100%的原因?,node.js,socket.io,cpu,strace,Node.js,Socket.io,Cpu,Strace,我正在用socket.io运行Node.js服务器。这是一个简单的聊天服务器。已经2年了,所以软件的版本很旧,所以我最近更新了它们。更新后,服务器100%频繁地消耗CPU。它已经运行了2年,所以我不认为原因是应用程序代码,但我无法找出问题所在 在我更新之前: Node.js 0.8.14 socket.io 0.9.16 快报2.5.2 现在我正在使用: Node.js 0.10.28~0.11.13(两者都尝试过) socket.io 1.0.1 快报4.1.1 我尝试过基准测试,但无

我正在用socket.io运行Node.js服务器。这是一个简单的聊天服务器。已经2年了,所以软件的版本很旧,所以我最近更新了它们。更新后,服务器100%频繁地消耗CPU。它已经运行了2年,所以我不认为原因是应用程序代码,但我无法找出问题所在

在我更新之前:

  • Node.js 0.8.14
  • socket.io 0.9.16
  • 快报2.5.2
现在我正在使用:

  • Node.js 0.10.28~0.11.13(两者都尝试过)
  • socket.io 1.0.1
  • 快报4.1.1
我尝试过基准测试,但无法复制。我发现模板呈现速度非常慢,但我的聊天服务器是为移动应用程序设计的,所以它不经常使用html页面。只有管理页面使用模板引擎,但CPU 100%发生在我没有看到管理页面时

使用strace,我得到了以下结果:

strace -r -p 32224 -c
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 16.91    0.003417          35        97           futex
 14.47    0.002923           8       347        72 epoll_ctl
 14.10    0.002848          20       144           write
 11.32    0.002286          15       152           read
  6.27    0.001266          18        70           close
  5.77    0.001165          19        61        61 connect
  5.53    0.001117           6       183           clock_gettime
  5.20    0.001051         117         9           munmap
  4.65    0.000940           5       173           gettimeofday
  4.19    0.000846          14        61           socket
  3.72    0.000752           6       122           ioctl
  3.36    0.000679          12        58           epoll_wait
  2.34    0.000473           7        72           getsockopt
  1.95    0.000394          56         7           mmap
  0.22    0.000045          23         2           open
------ ----------- ----------- --------- --------- ----------------
100.00    0.020202                  1558       133 total
然而,我不知道如何分析这份报告。epoll_ctl似乎被事件循环使用,epoll_ctl的错误可能是由connect的错误引起的,对吗?我发现syscall connect是用于套接字连接的,但我不能再进一步了

这份strace报告有2分钟长。没有那么多用户。当时只有2~5个用户

我能用报告找出原因吗?或者我必须找到其他方法进行调试吗?

有一种方法可以输出一个报告,该报告可以在Chrome Profiling选项卡中读取。如果你使用PM2和Keymetrics,这真的很容易。只需安装v8探查器和pmx模块。确保脚本中需要pmx模块,然后通过Keymetrics站点开始分析。您始终可以单独使用V8探查器来获取相同的报告。不过,这需要做更多的工作