node.js - NodeJS 100% cpu 使用率 - epoll_wait

标签 node.js

我试图找出为什么我的 nodejs 应用程序突然使用 100% 的 cpu。该应用程序有大约 50 个并发连接,并在 ec2 微型实例上运行。

下面是输出:strace -c node server.js

^C% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 87.32    0.924373           8    111657           epoll_wait
  6.85    0.072558           3     22762           pread
  2.55    0.026965           0    146179           write
  0.92    0.009733           0    108434         1 futex
  0.44    0.004661           0     82010         7 read
  0.44    0.004608           0    223317           clock_gettime
  0.31    0.003244           0    172467           gettimeofday
  0.31    0.003241          35        93           brk
  0.20    0.002075           0     75233         3 epoll_ctl
  0.19    0.002052           0     23850     11925 accept4
  0.19    0.001997           0     12302           close
  0.19    0.001973           7       295           mmap
  0.06    0.000617           4       143           munmap

这里是输出:node-tick-processor

 [Top down (heavy) profile]:
  Note: callees occupying less than 0.1% are not shown.

  inclusive      self           name
  ticks   total  ticks   total
  669160   97.4%  669160   97.4%  /lib/x86_64-linux-gnu/libc-2.15.so

   4834    0.7%     28    0.0%  LazyCompile: *Readable.push _stream_readable.js:116
   4750    0.7%     10    0.0%    LazyCompile: *emitReadable _stream_readable.js:392
   4737    0.7%     19    0.0%      LazyCompile: *emitReadable_ _stream_readable.js:407
   1751    0.3%      7    0.0%        LazyCompile: ~EventEmitter.emit events.js:53
   1081    0.2%      2    0.0%          LazyCompile: ~<anonymous> _stream_readable.js:741
   1045    0.2%      1    0.0%            LazyCompile: ~EventEmitter.emit events.js:53
    960    0.1%      1    0.0%        LazyCompile: *<anonymous> /home/ubuntu/node/node_modules/redis/index.js:101
    948    0.1%     11    0.0%          LazyCompile: RedisClient.on_data /home/ubuntu/node/node_modules/redis/index.js:541

这是我第一次调试 Node 应用程序。从上面的调试输出中是否可以得出任何结论?错误可能在哪里?

编辑

我的 Node 版本:v0.10.25

编辑2

将 Node 更新为:v0.10.33

这是输出

^C% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 91.81    1.894522           8    225505        45 epoll_wait
  3.58    0.073830           1     51193           pread
  1.59    0.032874           0    235054         2 write
  0.98    0.020144           0   1101789           clock_gettime
  0.71    0.014658           0    192494         1 futex
  0.57    0.011764           0    166704        21 read

最佳答案

似乎 Node JS v0.10.25 带有事件循环的错误,查看 here .

注意,来自 this github 拉取请求:

If the same file description is open in two different processes, then closing the file descriptor is not sufficient to deregister it from the epoll instance (as described in epoll(7)), resulting in spurious events that cause the event loop to spin repeatedly. So always explicitly deregister it.

作为解决方案,您可以尝试更新您的操作系统或更新 Node JS。

关于node.js - NodeJS 100% cpu 使用率 - epoll_wait,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26974493/

相关文章:

node.js - 如何使用 mongoskin 获取所有集合的列表

javascript - 保存条目后断开与 MongoDB 的连接

javascript - 一个接一个地运行几个 exec() 命令

php - codeigniter 的自定义 cli

node.js - MongoError : Can't canonicalize query: BadValue bad order array [2]

angularjs - 单独的用户/管理员 API?

javascript - 在 Node.js 应用程序中引用自定义架构时出错

javascript - 如何使用 webpack 将 js 复制到 html 文件?

node.js - CouchDB 部分/差异写入

c# - 如何覆盖 express js 默认的 Keep Alive 行为