2017-05-25 27 views
1

我在Ubuntu 14.04(trusty)上使用NodeJS 6.10.3 LTS运行API服务器。我注意到,我的API服务器在c4.large EC2实例上以〜600 reqs/min的速度运行。我的意思是,我看到CPU增加了100%注意,我知道我没有完全利用集群模块实例,但现在没关系。NodeJS性能问题

我把API服务器的一个.cpuprofile转储了10秒钟,并注意到每秒约300毫秒,分析器显示我的NodeJS代码正在(闲置)。

有人知道那是什么(空闲)意味着什么?这是一个GC问题吗?或者它是我触发的内部(至V8)锁定?任何帮助或指向工具来帮助调试这将是很好的。我正在对cpuprofile中的一些堆栈跟踪进行匿名处理,以便共享。

我使用的软件包主要是ExpressJS 4,Couchbase NodeJS SDK,Socket.IO。代码路径主要是读取请求,并推送到Couchbase。最后通过Views API查询couchbase,并在Socket.IO通道上推送一些汇总数据。所有漂亮的I/O异步友好的东西。我确定我没有调用任何同步函数。在cpu配置文件(空闲)之前没有函数调用模式。

+0

对不起,我没有更多,但是当我遇到Node perf问题时,这个讲话真的很有帮助:https://www.youtube.com/watch?v=O1YP8QP9gLA – SomeKittens

+0

如果服务器空闲而你不是' t使用任何同步I/O,那么你显然不会使CPU饱和(而不是让服务器完全忙),或者你的服务器不是CPU绑定的,而其他的东西(可能是磁盘或数据库)是你的瓶颈。 – jfriend00

+0

@ jfriend00实际上我的一个CPU核心在测试中保持100%的使用率。但我仍然每秒钟都会看到这些(空闲)的。 –

回答

0

它也可能只是I/O等待,这意味着没有任何套接字数据准备好读取,所以时间闲置。如果您正在使用负载测试库,则应检查请求是否在一秒之内均匀分布。

看看https://www.npmjs.com/package/gc-stats检查GC数据。有些标志可以增加堆空间,并在GC运行时更改,如果问题变成与GC有关。