Node.js的幾個“黃金”指標

jopen 8年前發布 | 18K 次閱讀 Node.js
 

Node.js應用的監控有一些需要特別注意的地方。該語言的動態特性為開發造成了新的問題,內存泄漏和單一功能阻塞事件隊列,這可能對整體應用 性能產生巨大的影響。并行執行作業使用“集群(cluster)”功能,以便充分利用多核CPU。但主要進程和工作進程屬于一個應用程序,所以我們應該對 它們進行監控。本文中,我們一起深入去了解Node.js應用程序的幾項重要指標,更好地解決和避免可能的問題。

垃圾回收&內存處理

Node.js是基于Google’s Chrome V8的Javascript引擎。垃圾回收可以回收那些不再需要的對象的內存。V8垃圾回收可以停止執行程序。增量GC周期(scavenging)過程 只是堆的一部分,并且非常快。為了盡量減少程序執行中的暫停,執行完整的GC運行較不頻繁。

關于垃圾回收的指標,我們首先應該衡量所花費的時間。此外,還需要看完整GC循環(或增量GC循環)的執行周期。堆內存的大小可以與上次GC運行的大小進行比較,看是否有增多的趨勢。以下是需要監控的指標:

  • 垃圾回收的時間消耗
  • 計算完整GC周期
  • 計算增量GC周期

Node.js的幾個“黃金”指標

垃圾回收指標

除了GC發生的頻率,時間,我們還可以通過以下的指標觀察內存的情況:

  • GC周期之間釋放內存(見上文)
  • 流程堆大小和堆使用

Node.js的幾個“黃金”指標

進程內存信息

事件循環– Node.js性能的秘訣是CPU限制并使用異步操作的能力。這樣,我們可以充分利用CPU,不浪費等待I/ O操作的周期。這意味著一臺服務器可以進行多個連接,異步操作不被阻塞。一旦操作完成,使用回調函數來繼續處理。它的實現基于單一事件循環—單獨的線程中 處理異步函數調用。使用同步操作會使性能下降,因為其他操作需要等待執行。這就是為什么,“不堵塞事件循環”是Node.js性能的黃金法則。

  • 最慢的事件處理(最大延遲)
  • 平均事件循環延遲
  • 最快的事件處理(最小延遲)

Node.js的幾個“黃金”指標

最慢,平均和最快的事件處理

事件循環的高延遲可能意味著使用阻斷(同步)或程序正在處理事件。這可能會影響整個Node.js應用程序的性能。

集群模式和進程數– 為了使Node.js處理不止一個進程,我們需要使用“集群”模式。主進程共享插槽與叉形工作進程,并可以用它交換消息。有一個網絡服務器派生n個工作流 程的典型用例:在共享的服務器接口中操作,并處理循環的要求。多數情況下,程序選中N個服務器提供的CPU—這就是為什么常規情況下,進程的數量恒定。如 果這個數字產生變化,這意味著工作進行已經終止,或其他的一些原因。當需要處理的進程排隊的時候,要按照需要依次處理。這時候,進程數量隨時都會變化。可 以使用像SPM類似的工具,觀察Node.js的進程數量。Node.js進程的時間很短,傳統的檢測工具可能不夠準確。

Node.js的幾個“黃金”指標

進程數量

例如,要在不同的Node.js子過程比較事件循環延遲,我們需要能夠選擇想要的進程進行比較:

Node.js的幾個“黃金”指標

每個進程的時間循環延遲

Web框架– 越來越多的人使用Node.js構建Web服務器框架。最流行的是:Express、 Hapi.js、 Restify、 Mean.io、 Meteor,等等。當進行HTTP檢測時,需要注意以下這些關鍵指標:

  • 響應時間(HTTP / HTTPS)
  • 請求率
  • 錯誤率(總數,錯誤種類)
  • 請求/響應內容大小

Node.js的幾個“黃金”指標

HTTP / HTTPS指標概述

當然,Node.js不會運行在真空中。它們連接到其他服務,其他類型的應用,高速緩存,數據存儲等。因此,Node.js單獨使用或單獨監測不 是明智的做法。在這里,我要給大家一個忠告:你要準備一個足夠大的顯示屏,以便更好的進行檢測。 Node.js 經常是與 Elasticsearch、 Redis等等一起使用。因此,需要將相關的指標一起顯示。如下圖所示:

Node.js的幾個“黃金”指標

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!