原創(chuàng)|行業(yè)資訊|編輯:龔雪|2015-12-21 13:25:14.000|閱讀 646 次
概述:Node.js應(yīng)用的監(jiān)控有一些需要特別注意的地方。該語言的動態(tài)特性為開發(fā)造成了新的問題,內(nèi)存泄漏和單一功能阻塞事件隊(duì)列,這可能對整體應(yīng)用性能產(chǎn)生巨大的影響。本文中,我們一起深入去了解Node.js應(yīng)用程序的幾項(xiàng)重要指標(biāo),更好地解決和避免可能的問題。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Node.js應(yīng)用的監(jiān)控有一些需要特別注意的地方。該語言的動態(tài)特性為開發(fā)造成了新的問題,內(nèi)存泄漏和單一功能阻塞事件隊(duì)列,這可能對整體應(yīng)用性能產(chǎn)生巨大的影響。并行執(zhí)行作業(yè)使用“集群(cluster)”功能,以便充分利用多核CPU。但主要進(jìn)程和工作進(jìn)程屬于一個應(yīng)用程序,所以我們應(yīng)該對它們進(jìn)行監(jiān)控。本文中,我們一起深入去了解Node.js應(yīng)用程序的幾項(xiàng)重要指標(biāo),更好地解決和避免可能的問題。
Node.js是基于Google’s Chrome V8的Javascript引擎。垃圾回收可以回收那些不再需要的對象的內(nèi)存。V8垃圾回收可以停止執(zhí)行程序。增量GC周期(scavenging)過程只是堆的一部分,并且非常快。為了盡量減少程序執(zhí)行中的暫停,執(zhí)行完整的GC運(yùn)行較不頻繁。
關(guān)于垃圾回收的指標(biāo),我們首先應(yīng)該衡量所花費(fèi)的時間。此外,還需要看完整GC循環(huán)(或增量GC循環(huán))的執(zhí)行周期。堆內(nèi)存的大小可以與上次GC運(yùn)行的大小進(jìn)行比較,看是否有增多的趨勢。以下是需要監(jiān)控的指標(biāo):
除了GC發(fā)生的頻率,時間,我們還可以通過以下的指標(biāo)觀察內(nèi)存的情況:
事件循環(huán) – Node.js性能的秘訣是CPU限制并使用異步操作的能力。這樣,我們可以充分利用CPU,不浪費(fèi)等待I/ O操作的周期。這意味著一臺服務(wù)器可以進(jìn)行多個連接,異步操作不被阻塞。一旦操作完成,使用回調(diào)函數(shù)來繼續(xù)處理。它的實(shí)現(xiàn)基于單一事件循環(huán)—單獨(dú)的線程中處理異步函數(shù)調(diào)用。使用同步操作會使性能下降,因?yàn)槠渌僮餍枰却龍?zhí)行。這就是為什么,“不堵塞事件循環(huán)”是Node.js性能的黃金法則。
事件循環(huán)的高延遲可能意味著使用阻斷(同步)或程序正在處理事件。這可能會影響整個Node.js應(yīng)用程序的性能。
集群模式和進(jìn)程數(shù) – 為了使Node.js處理不止一個進(jìn)程,我們需要使用“集群”模式。主進(jìn)程共享插槽與叉形工作進(jìn)程,并可以用它交換消息。有一個網(wǎng)絡(luò)服務(wù)器派生n個工作流程的典型用例:在共享的服務(wù)器接口中操作,并處理循環(huán)的要求。多數(shù)情況下,程序選中N個服務(wù)器提供的CPU—這就是為什么常規(guī)情況下,進(jìn)程的數(shù)量恒定。如果這個數(shù)字產(chǎn)生變化,這意味著工作進(jìn)行已經(jīng)終止,或其他的一些原因。當(dāng)需要處理的進(jìn)程排隊(duì)的時候,要按照需要依次處理。這時候,進(jìn)程數(shù)量隨時都會變化。可以使用像SPM類似的工具,觀察Node.js的進(jìn)程數(shù)量。Node.js進(jìn)程的時間很短,傳統(tǒng)的檢測工具可能不夠準(zhǔn)確。
例如,要在不同的Node.js子過程比較事件循環(huán)延遲,我們需要能夠選擇想要的進(jìn)程進(jìn)行比較:
Web框架 – 越來越多的人使用Node.js構(gòu)建Web服務(wù)器框架。最流行的是:Express、 Hapi.js、 Restify、 Mean.io、 Meteor,等等。當(dāng)進(jìn)行HTTP檢測時,需要注意以下這些關(guān)鍵指標(biāo):
當(dāng)然,Node.js不會運(yùn)行在真空中。它們連接到其他服務(wù),其他類型的應(yīng)用,高速緩存,數(shù)據(jù)存儲等。因此,Node.js單獨(dú)使用或單獨(dú)監(jiān)測不是明智的做法。在這里,我要給大家一個忠告:你要準(zhǔn)備一個足夠大的顯示屏,以便更好的進(jìn)行檢測。 Node.js 經(jīng)常是與 Elasticsearch、 Redis等等一起使用。因此,需要將相關(guān)的指標(biāo)一起顯示。如下圖所示:
本文整理翻譯自
譯文鏈接:
轉(zhuǎn)載請注明:本文轉(zhuǎn)載自慧都控件網(wǎng)。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn