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