2016-04-08 50 views
0

我有一個使用Node.js + Express 3 + Jade製作的應用程序,它使用MySQL DB和node-mysql模塊。Node.js高CPU使用率,如何調試?

該應用程序由PM2啓動和監視。

當主頁被加載時,我看到CPU的使用率很高,如下圖所示。

usage of CPU of App Node.js

開始頁面上的MySQL數據庫執行三次查詢,而且如果我把JSON對象,而不是MySQL的查詢,似乎CPU使用率仍然很高。

有一種方法可以跟蹤終端功能的CPU使用情況,以瞭解CPU使用率高的原因?

+0

「主要頁面加載我看到一個非常高的CPU使用」 - DO你的意思是你在執行應用程序時總會看到很高的使用率,只有在加載主頁面時纔會看到它,或者只有在第一次加載主頁面時纔會看到它? –

+0

這個應用程序只有兩個頁面。 開始頁面是一種配置器,因此它在開始時會進行一些查詢,而其他查詢則通過AJAX Rest服務執行。 第二頁(最重要)在開始時有很多查詢,在這種情況下,CPU使用率爲80/100%。應用程序會將一些數據存儲在會話中,並且在此頁面中執行的其他操作(通過REST服務)的CPU使用率非常低。所以我認爲MySQL查詢可能是個問題,但我需要一種方法來檢查它,也許可以解決它。 – Zauker

回答

2

我解決我的問題CPU剖析感謝。

我試圖在我的端點函數的更多部分記錄CPU使用情況,但這種方法沒有幫助。 大家誰需要得到CPU使用率這個腳本這是非常好的: http://gist.github.com/bag-man/5570809

要排除我創建一個只進行查詢的簡單應用程序中的問題涉及到MySQL查詢和我ApacheBench進行了測試。 該測試已成功通過。

之後,我找到了解決方案。

剖析了Node.js的都能在這裏找到解釋: https://nodejs.org/en/docs/guides/simple-profiling/

我跑了應用程序內置的分析器:

NODE_ENV=development node --prof app.js 

我通過ApacheBench

ab -k -c 20 -n 250 "http://localhost:8080/" 

提出了一些要求我生成了一個processed.txt

node --prof-process isolate-0xnnnnnnnnnnnn-v8.log > processed.txt 

在總結我得到的是:

[Summary]: 
    ticks total nonlib name 
    4036 22.6% 23.3% JavaScript 
    13130 73.6% 75.9% C++ 
    1334 7.5% 7.7% GC 
    527 3.0%   Shared libraries 
    144 0.8%   Unaccounted 

「自下而上(重)曲線」 是所有與醜化-JS模塊:

/node_modules/with/node_modules/uglify-js/lib/parse.js 

所以找的依賴我看到這個模塊是由Jade使用。

我的應用程序執行了很多查詢並生成一個大的Json對象,它傳遞給了Jade模板引擎。

Jade使用了大量的CPU來解析傳遞的大對象。

作爲第一個我從0.35.0更新到1.3.1模塊(因爲帕格仍在阿爾法)。

Jade使用了大量的CPU來解析傳遞的大對象。

作爲第一個我從0.35.0更新到1.3.1模塊(因爲帕格仍在阿爾法)。

感謝此更新,表演增加了。

但最後我打算不重查詢加載頁面,並獲得通過REST服務所需要的信息,而無需將數據傳遞到翡翠

1

您可以使用os模塊登錄機器的cpu使用率

var os = require('os'); 
console.log(os.cpus()); 
+0

是的,我看到了這個功能,但我需要知道使用的CPU百分比。我找到了這個解決方案,看起來不錯。 https://gist.github.com/bag-man/5570809 – Zauker