nodejs內存監控1-監控方案

nodejs內存監控1-監控方案

本文是《nodejs內存監控》監控系列的第一篇文章,主要是講述nodejs主要監控的指標以及市面上一些主流的監控方案。(本文非原創,搬了一些文章的知識點只做爲筆記使用)前端

介紹

Node.js 在前端的地位愈加重要,在前端的另外一面後面也逐漸展露手腳。可是,僅僅一些 Demo 只能覆蓋企業級應用的部分場景,服務在生產環境的穩定運行依靠的是完善的監控、日誌、流程等基礎設施。node

當使用 Node 在生產環境做爲服務器語言時,併發量過大或者代碼問題形成 OOM (out of memory) 或者 CPU 滿載這些都是服務器中常見的問題,此時經過監控 CPU 及內存,再結合日誌及 Release 就很容易發現問題。express

關鍵指標

Node.js 監控的指標衡量的服務的負載、處理能力、健康狀態,下面來介紹一下性能指標的定義。服務器

內存

用於判斷在服務器中的佔用狀況,是否存在內存泄露問題。內存的基本指標能夠經過 process.memoryUsage() 方法來獲取。markdown

  1. rss 進程駐留內存:Resident Set Size 實際使用物理內存(包含共享庫佔用的內存)。
  2. external 外部內存:V8 管理的,綁定到 Javascript 的 C++ 對象的內存使用狀況
  3. heapTotal V8 申請到的堆內存總大小
  4. heapUsed V8 的堆內存使用大小

堆空間分佈狀況併發

  1. new space used,新生代空間的內存使用大小
  2. old space used,老生代空間的內存使用大小
  3. map space used,隱藏類空間的內存使用大小
  4. code space used,代碼空間的內存使用大小
  5. large object space used,大對象空間的內存使用大小

http

  1. Apdex 性能指數
  2. QPS
  3. 響應時間
  4. 狀態碼 & 錯誤率
  5. 字節大小(吞吐量)

CPU

  1. 使用率
  2. 負載(一、五、15)分鐘的平均負載(系統仍是進程?)

GC 統計

  1. gcTime:GC發生的時間,精度可能須要提升到ms級別,而不是second級別
  2. gcType:GC類型,通常來講新生代的scavenge回收能夠忽略,這個類型GC的量級及可優化性都比較低
  3. gcPause:GC中斷時長,須要按不一樣GC類型進行分類收集,老生代的markSweepCompact數據最爲關鍵
  4. sizeBefore:GC前內存大小 bytes
  5. sizeAfter:GC後內存大小 bytes
  6. holesBefore:GC前內存空洞大小 bytes
  7. holesAfter:GC後內存空洞大小 bytes
  8. allocated:GC間,內存分配量 bytes
  9. promoted:GC間,對象晉升量 bytes
  10. allocationThroughput:GC間,新生代內存申請速率 bytes/ms
  11. promotionRatio:當前GC中內存重新生代晉升到老生代的百分比 %
  12. incrementalWalltime:增量標記時長 ms
  13. compactionSpeed:內存Compacting速率 bytes/ms

事件循環延遲

進程存活時長

  1. 進程生命週期,運行時長。
  2. 進程重啓次數

開源方案

swagger-stats

支持監控 koa 與 express 框架的服務,指標展現看板很人性化,也支持 Prometheus。app

egg-prometheus

egg.js 監控插件,採集指標少,僅 http 與 rpc 性能指標,適合二次開發。框架

Pandora.js

阿里開源 Node.js 監控工具,在 egg.js 上使用過一段時間,但服務不夠穩定。koa

nest-status-monitor

適用於nest.js簡單的監控服務。ide

Sandbox

阿里 Node.js 應用程序監視,Docker Compose 的 Sandbox 部署配置。不過看起來很久沒人維護應該是kpi項目爛尾了

PM2

通用 Node.js 進程守護工具,附帶監控指標。監控指標須要加錢,並且不支持本地部署。對於數據敏感的能夠直接pass掉。

Express Status Monitor

Express 框架的監控插件。

prom-client

Prometheus 的 Node.js 客戶端,能夠建立指標類型,用於生成標準的 metrics。搭配prometheus十分強大,固然也能夠脫離prometheus只用來採集數據。

node-prometheus-gc-stats

基於 prom-client 的,用於採集 GC 信息。

appmetrics

node.js 應用指標,支持 prometheus,另外 appmetrics-dash 提供看板功能。

appmetrics-prometheus-client

收集指標集並將其公開 metrics,以便 Prometheus 服務器抓取。

easy-monitor

輕量級實時 Node.js 內核性能監控分析工具。純開源項目,若是要求不高仍是十分推薦上這個開源項目。

alinode

開源方案中的第一選擇!,支持本地部署並且也是免費試用功能強大,中小公司的第一選擇。不過嚴格上屬於半開源,監控數據會上傳到阿里雲的後臺進行清洗處理,對於數據比較敏感的可能沒辦法試用。

sematext

國外一家提供監控基礎設施的服務商。

博主當前node監控方案

由於我自建了k8s集羣,而且把絕大部分項目都遷移到了k8s上,全部天然而然的選擇了prometheus + granafa + prom-cilent的開源方案來實現node項目的監控。

在prometheus的基礎上,使用了開源的nodeJs dashboard。在這個基礎上額外加上了http數據的相關監控。

alt

在接下來的第二篇中,我將會大體的基於prometheus + granafa + prom-cilent展現如何監控nodejs項目。

nodejs內存監控2-prometheus+grafana監控實現

相關文章
相關標籤/搜索