2017-05-25 77 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有關。