Node API 占用 100% CPU,node-tick-processor 输出看起来很神秘

Posted

技术标签:

【中文标题】Node API 占用 100% CPU,node-tick-processor 输出看起来很神秘【英文标题】:Node API taking 100% CPU, node-tick-processor output looks cryptic 【发布时间】:2013-07-15 16:59:14 【问题描述】:

我有一个通常可以很好地处理流量的节点 API。但是,在我们的高峰期,它会进入开始使用 100% CPU 并需要重新启动的状态。重新启动后,它会在接下来的几天内恢复正常状态。

使用负载测试站点,我已经能够重现此问题。我正在负载测试的请求非常简单,所以我担心问题出在我正在使用的第三方库中。

我是调试节点的新手,我不确定如何处理 node-tick-processor 的以下输出。谁能破译这个?

更新:我正在运行节点 v0.10.4

[Unknown]:
ticks  total  nonlib   name
   5    0.0%

[Shared libraries]:
ticks  total  nonlib   name
11943   49.1%    0.0%  /lib64/libc-2.12.so
10754   44.2%    0.0%  /usr/local/bin/node
  314    1.3%    0.0%  /lib64/libpthread-2.12.so
   50    0.2%    0.0%  7fff318b4000-7fff318b5000
    5    0.0%    0.0%  /lib64/libm-2.12.so
    3    0.0%    0.0%  /usr/lib64/libstdc++.so.6.0.17

[javascript]:
ticks  total  nonlib   name
 40    0.2%    3.2%  LazyCompile: ~read tls.js:397
 36    0.1%    2.8%  LazyCompile: *EventEmitter.addListener events.js:126
 29    0.1%    2.3%  LazyCompile: *Readable.read _stream_readable.js:226
<clipped>

[Bottom up (heavy) profile]:
Note: percentage shows a share of a particular caller in the total
amount of its parent calls.
Callers occupying less than 2.0% are not shown.

ticks parent  name
11943   49.1%  /lib64/libc-2.12.so
10754   44.2%  /usr/local/bin/node
 8270   76.9%    LazyCompile: *use tls.js:222
 5162   62.4%      LazyCompile: ~read tls.js:397
 5074   98.3%        LazyCompile: *Readable.read _stream_readable.js:226
 3396   66.9%          LazyCompile: ~write tls.js:315
 3396  100.0%            LazyCompile: *Writable.write _stream_writable.js:155
 1063   20.9%          LazyCompile: *write tls.js:315
 1063  100.0%            LazyCompile: *Writable.write _stream_writable.js:155
 370    7.3%          LazyCompile: *Writable.write _stream_writable.js:155
 370  100.0%            LazyCompile: ~write _stream_readable.js:546
 186    3.7%          LazyCompile: ~callback tls.js:753
 180   96.8%            LazyCompile: *onclienthello tls.js:748
 6    3.2%            LazyCompile: ~onclienthello tls.js:748
 2417   29.2%      LazyCompile: *read tls.js:397
 2417  100.0%        LazyCompile: *Readable.read _stream_readable.js:226
 2320   96.0%          LazyCompile: *Writable.write _stream_writable.js:155
 2315   99.8%            LazyCompile: ~write _stream_readable.js:546
   57    2.4%          LazyCompile: ~callback tls.js:753
   57  100.0%            LazyCompile: *onclienthello tls.js:748
  691    8.4%      LazyCompile: *Readable.read _stream_readable.js:226
  675   97.7%        LazyCompile: *write tls.js:315
  675  100.0%          LazyCompile: *Writable.write _stream_writable.js:155
  674   99.9%            LazyCompile: ~write _stream_readable.js:546

【问题讨论】:

什么版本的节点? 0.10.4;更新了我的帖子。 看来你删掉了 GC 的使用。那是多少?另外,您能否提供代码/负载测试的链接。这样帮忙会容易得多。 【参考方案1】:

对于那些仍然来到这里的人,这是在系统节点模块中的 SSL 处理代码的某个地方引起的。我重新配置了我的堆栈以在 nginx 进行 SSL 终止,并在节点级别使用基本的 HTTP 处理,这个问题完全消失了。

【讨论】:

以上是关于Node API 占用 100% CPU,node-tick-processor 输出看起来很神秘的主要内容,如果未能解决你的问题,请参考以下文章

如何调试导致 100% cpu 使用的 node.js?

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

node.js 应用程序突然以 100% 加载 CPU 并挂起

如何防止 Node.js API REST 应用程序对高 CPU/RAM 使用率无响应?

python请求占用100%的cpu

每日灵魂一问-Node性能如何进行监控以及优化?