成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

為什么需要性能監控?聊聊Node.js性能監控

為什么需要性能監控?下面本篇就來帶大家了解一下Node.js性能監控,希望對大家有所幫助!

為什么需要性能監控?聊聊Node.js性能監控

為什么需要性能監控

Node作為Javascript在服務端的一個運行時(Runtime),極大的豐富了Javascript的應用場景。

但是Node.js Runtime本身是一個黑盒,我們無法感知運行時的狀態,對于線上問題也難以復現

因此性能監控是Node.js應用程序「正常運行」的基石。不僅可以隨時監控運行時的各項指標,還可以幫助排查異常場景問題。

組成部分

性能監控可以分為兩個部分:

  • 性能指標的采集和展示

    • 進程級別的數據:CPU,Memory,Heap,GC等
    • 系統級別的數據:磁盤占用率,I/O負載,TCP/UDP連接狀態等
    • 應用層的數據:QPS,慢HTTP,業務處理鏈路日志等
  • 性能數據的抓取和分析

    • Heapsnapshot:堆內存快照
    • Cpuprofile:CPU快照
    • Coredump:應用崩潰快照

方案對比

為什么需要性能監控?聊聊Node.js性能監控

從上圖可以看到目前主流的三種Node.js性能監控方案的優缺點,以下是簡單介紹這三種方案的組成:

  • Prometheus

    • prom-client是prometheus的nodejs實現,用于采集性能指標
    • grafana是一個可視化平臺,用來展示各種數據圖表,支持prometheus的接入
    • 只支持了性能指標的采集和展示,排查問題還需要其他快照工具,才能組成閉環
  • AliNode

    • alinode是一個兼容官方nodejs的拓展運行時,提供了一些額外功能:

      • v8的運行時內存狀態監控
      • libuv的運行時狀態監控
      • 在線故障診斷功能:堆快照、CPU Profile、GC Trace等
    • agenthub是一個常駐進程,用來收集性能指標并上報

      • 整合了agentx + commdx的便利工具
    • 整體從監控,展示,快照,分析形成閉環,接入便捷簡單,但是拓展運行時還是有風險

  • Easy-Monitor

    • xprofiler 負責進行實時的運行時狀態采樣,以及輸出性能日志(也就是性能數據的抓取)
    • xtransit 負責性能日志的采集與傳輸
    • 跟AliNode最大的區別在于使用了Node.js Addon來實現采樣器

性能指標

CPU

為什么需要性能監控?聊聊Node.js性能監控

通過process.cpuUsage()可以獲取當前進程的CPU耗時數據,返回值的單位是微秒

  • user:進程執行時本身消耗的CPU時間
  • system:進程執行時系統消耗的CPU時間

Memory

為什么需要性能監控?聊聊Node.js性能監控

通過process.memoryUsage()可以獲取當前進程的內存分配數據,返回值的單位是字節

  • rss:常駐內存,node進程分配的總內存大小
  • heapTotal:v8申請的堆內存大小
  • heapUsed:v8已使用的堆內存大小
  • external:v8管理的C++所占用的內存大小
  • arrayBuffers:分配給ArrayBuffer的內存大小

為什么需要性能監控?聊聊Node.js性能監控

從上圖可以看出,rss包含代碼段(Code Segment)、棧內存(Stack)、堆內存(Heap)

  • Code Segment:存儲代碼段
  • Stack:存儲局部變量和管理函數調用
  • Heap:存儲對象、閉包、或者其他一切

Heap

通過v8.getHeapStatistics()v8.getHeapSpaceStatistics()可以獲取v8堆內存和堆空間的分析數據,下圖展示了v8的堆內存組成分布:

為什么需要性能監控?聊聊Node.js性能監控

堆內存空間先劃分為空間(space),空間又劃分為頁(page),內存按照1MB對齊進行分頁。

  • New Space:新生代空間,用來存放一些生命周期比較短的對象數據,平分為兩個空間(空間類型為semi space):from spaceto space

    • 晉升條件:在New space中經過兩次GC依舊存活
  • Old Space:老生代空間,用來存放New Space晉升的對象

  • Code Space:存放v8 JIT編譯后的可執行代碼

  • Map Space:存放Object指向的隱藏類的指針對象,隱藏類指針是v8根據運行時記錄下的對象布局結構,用于快速訪問對象成員

  • Large Object Space:用于存放大于1MB而無法分配到頁的對象

GC

v8的垃圾回收算法分為兩類:

  • Major GC:使用了Mark-Sweep-Compact算法,用于老生代的對象回收
  • Minor GC:使用了Scavenge算法,用于新生代的對象回收

Scavenge

為什么需要性能監控?聊聊Node.js性能監控

前提:New space分為fromto兩個對象空間

觸發時機:當New space空間滿了

步驟:

  • from space中,進行寬度優先遍歷

  • 發現存活(可達)對象

    • 已經存活過一次(經歷過一次Scavange),晉升到Old space
    • 其他的復制到to space
  • 當復制結束時,to space中只有存活的對象,from space就被清空了

  • 交換from spaceto space,開始下一輪Scavenge

適用于回收頻繁,內存不大的對象,典型的空間換時間的策略,缺點是浪費了多一倍的空間

Mark-Sweep-Compact

為什么需要性能監控?聊聊Node.js性能監控

三個步驟:標記、清除、整理

觸發時機:當Old space空間滿了

步驟:

  • Marking(三色標記法)

    • 白色:代表可回收對象
    • 黑色:代表不可回收對象,且其所產生的引用都已經掃描完畢
    • 灰色:代表不可回收對象,且其所產生的引用還沒掃描完
    • 將V8根對象直接引用的對象放進一個marking queue(顯式棧)中,并將這些對象標記為灰色
    • 從這些對象開始做深度優先遍歷,每訪問一個對象,將該對象從marking queue pop出來,并標記為黑色
    • 然后將該對象引用下的所有白色對象標記為灰色,pushmarking queue上,如此往復
    • 直到棧上所有對象都pop掉為止,老生代的對象只剩下黑色(不可回收)和白色(可以回收)兩種了
    • PS:當一個對象太大,無法push到空間有限的棧時,v8會把這個對象保留灰色跳過,將整個棧標記為溢出狀態(overflowed),等棧清空后,再次進行遍歷標記,這樣導致需要額外掃描一遍堆
  • Sweep

    • 清除白色對象
    • 會造成內存空間不連續
  • Compact

    • 由于Sweep會造成內存空間不連續,不利于新對象進入GC
    • 把黑色(存活)對象移到Old space的一端,這樣清除出來的空間就是連續完整的
    • 雖然可以解決內存碎片問題,但是會增加停頓時間(執行速度慢)
    • 在空間不足以對新生代晉升過來的對象進行分配時才使用mark-compact

Stop-The-World

在最開始v8進行垃圾回收時,需要停止程序的運行,掃描完整個堆,回收完內存,才會重新運行程序。這種行為就叫全停頓(Stop-The-World

雖然新生代活動對象較小,回收頻繁,全停頓,影響不大,但是老生代存活對象多且大,標記、清理、整理等造成的停頓就會比較嚴重。

優化策略

  • 增量回收(Incremental Marking):在Marking階段,當堆達到一定大小時,開始增量GC,每次分配了一定量的內存后,就暫停運行程序,做幾毫秒到幾十毫秒的marking,然后恢復程序的運行。

這個理念其實有點像React框架中的Fiber架構,只有在瀏覽器的空閑時間才會去遍歷Fiber Tree執行對應的任務,否則延遲執行,盡可能少地影響主線程的任務,避免應用卡頓,提升應用性能。

  • 并發清除(Concurrent Sweeping):讓其他線程同時來做 sweeping,而不用擔心和執行程序的主線程沖突
  • 并行清除(Parallel Sweeping):讓多個 Sweeping 線程同時工作,提升 sweeping 的吞吐量,縮短整個 GC 的周期

空間調整

由于v8對于新老生代的空間默認限制了大小

  • New space 默認限制:64位系統為32M,32位系統為16M
  • Old space 默認限制:64位系統為1400M,32位系統為700M

因此node提供了兩個參數用于調整新老生代的空間上限

  • --max-semi-space-size:設置New Space空間的最大值
  • --max-old-space-size:設置Old Space空間的最大值

查看GC日志

node也提供了三種查看GC日志的方式:

  • --trace_gc:一行日志簡要描述每次GC時的時間、類型、堆大小變化和產生原因
  • --trace_gc_verbose:展示每次GC后每個V8堆空間的詳細狀況
  • --trace_gc_nvp:每次GC的詳細鍵值對信息,包含GC類型,暫停時間,內存變化等

由于GC日志比較原始,還需要二次處理,可以使用AliNode團隊開發的v8-gc-log-parser

快照工具

Heapsnapshot

對于運行程序的堆內存進行快照采樣,可以用來分析內存的消耗以及變化

生成方式

生成.heapsnapshot文件有以下幾種方式:

  • 使用heapdump

為什么需要性能監控?聊聊Node.js性能監控

  • 使用v8的heap-profile

為什么需要性能監控?聊聊Node.js性能監控

  • 使用nodejs內置的v8模塊提供的api

    • v8.getHeapSnapshot()

    為什么需要性能監控?聊聊Node.js性能監控

    • v8.writeHeapSnapshot(fileName)

    為什么需要性能監控?聊聊Node.js性能監控

  • 使用v8-profiler-next

為什么需要性能監控?聊聊Node.js性能監控

分析方法

生成的.heapsnapshot文件,可以在Chrome devtools工具欄的Memory,選擇上傳后,展示結果如下圖:

為什么需要性能監控?聊聊Node.js性能監控

默認的視圖是Summary視圖,在這里我們要關注最右邊兩欄:Shallow SizeRetained Size

  • Shallow Size:表示該對象本身在v8堆內存分配的大小
  • Retained Size:表示該對象所有引用對象的Shallow Size之和

當發現Retained Size特別大時,該對象內部可能存在內存泄漏,可以進一步展開去定位問題

還有Comparison視圖是用于比較分析兩個不同時段的堆快照,通過Delta列可以篩選出內存變化最大的對象

為什么需要性能監控?聊聊Node.js性能監控

Cpuprofile

對于運行程序的CPU進行快照采樣,可以用來分析CPU的耗時及占比

生成方式

生成.cpuprofile文件有以下幾種方式:

  • v8-profiler(node官方提供的工具,不過已經無法支持node v10以上的版本,并不再維護)
  • v8-profiler-next(國人維護版本,支持到最新node v18,持續維護中)

這是采集5分鐘的CPU Profile樣例

為什么需要性能監控?聊聊Node.js性能監控

分析方法

生成的.cpuprofile文件,可以在Chrome devtools工具欄的Javascript Profiler(不在默認tab,需要在工具欄右側的

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
YY1111111少妇影院光屁| 大伊香蕉精品一区视频在线| www.comAV在线观看| 被滋润的少妇疯狂呻吟| 处破女处破全过程| 国产精品YY9299在线观看| 国产午夜高清高清在线观看 | 中国国产高清免费AV片| 91人妻人人澡人人爽人人精品 | 一本久久精品一区二区| 2823理论片在线播放| 宝贝乖女小芳小雪| 国产精品美女久久久免费| 护士HD老师FREE性ⅩⅩⅩⅩ| 久久人与动人物A级毛片| 琪琪无码午夜伦埋影院| 婷婷五月花丁香综合| 亚洲成A人片在线观看中文| 在熟睡夫面前侵犯我在线播放 | 欧洲另类一二三四区| 天堂AV无码大芭蕉伊人AV| 亚洲成av人片在线观看无码| 中文字幕天天躁日日躁狠狠躁免费| 爆乳女教师 高清BD| 国产精品亚洲欧美大片在线观看| 精品无人区乱码1区2区3区在线| 廖承宇做受被C22分钟视频| 日韩精品视频一区二区三区| 亚欧洲乱码视频一二三区| 永久免费观看美女裸体的网站| 被教官按在寝室狂到腿软视频| 国产三级无码内射在线看| 可播放的免费男同GAY| 三个人一起玩3Q详细经过| 亚洲GAY片在线GV网站| 91人妻人人做人碰人人爽九色| 国产YW855.CCM免费观看| 九妹免费观看完整版| 人妻妺妺窝人体色WWW聚色窝| 羞羞影院午夜男女爽爽免费视频| 中国女RAPPER大妈| 国产成人精品午夜福利APP色多| 九九九精品成人免费视频7| 青青草无码精品伊人久久7| 亚洲AⅤ无码精品一区二区三区 | 国产69久久精品成人看| 久久精品蜜芽亚洲国产AV| 日本精产国品一二三产品| 亚洲国产欧美国产综合久久| XXXX性BBBB欧美| 精品国产AⅤ一区二区三区V视界| 人妻AVAV中文系列久久| 亚洲成AV人片在线观看不卡| 波多野结衣无内裤护士| 久久99国产精品久久| 日韩无码视频一区二区三区四区| 亚洲一区波多野结衣在线APP| 东京热TOKYO综合久久精品| 久久夜色精品国产噜噜AV| 天堂M和天堂2M区别| 中文字幕无码日韩AV| 国产日韩欧美亚欧在线| 欧美最猛黑人XXXⅩ猛男视频| 亚洲高清毛片一区二区| 成人精品一卡2卡3卡4卡新区乱| 久久国产精品99国产精| 四虎成人精品在永久免费| 18禁强伦姧人妻又大又| 国产亚洲大尺度无码无码专线| 欧美在线三级艳情网站| 亚洲精品亚洲人成人网| 亚洲AV无码成人片在线观看| 四十如虎的丰满熟妇啪啪| 无码人妻斩一区二区三区| 99精品国产综合久久久久五月天| 国自产拍偷拍精品啪啪AV| 日产中文字幕在线精品一区| 在线亚洲人成电影网站色WWW | 水多的女人男人最上瘾| 99久久精品费精品国产一区二| 狠狠色综合久久丁香婷婷| 手机在线永久免费观看AV片| 999ZYZ玖玖资源站在线观看| 蜜桃精品欧美一区二区三区| 用舌头去添高潮无码AV在线观看| 国产69精品久久久久777| 妞干网在线视频免费观看| 亚洲精品亚洲人成在线| 国产精品国产三级欧美二区| 人妻少妇无码专视频在线| 中文字幕无码一线二线三线| 精品久久人妻AV中文字幕| 无码人妻精品一区二区蜜桃天美 | 国产精品人人做人人爽人人添| 人妻中文字幕制服丝袜| 18禁止导深夜福利备好纸巾| 久久99精品久久久久久齐齐| 小货SAO边洗澡边CAO你动漫| 成人欧美一区二区三区黑人免 | CSGO白嫖网站| 慢一点久一点真一点下一句| 亚洲欧美乱日韩乱国产| 国产无遮挡又黄又爽不要VIP软| 天堂VA视频一区二区| 补课老师让我爽了一夜| 欧美日韩国产成人高清视频| 又粗又大内射免费视频小说| 精品无码成人片一区二区| 亚洲AV噜噜在线成人网站| 国产高潮刺激叫喊视频| 色8久久人人97超碰香蕉987| 被夫上司强迫的女人在线中文| 欧美老熟妇XB水多毛多| 6080YY无码中文字幕| 蜜臀AV无码一区二区三区| 伊在人亚洲香蕉精品区| 久久久久无码精品国产蜜桃| 亚洲欧美在线综合色影视| 国精产品一品二品国精| 性欧美丰满熟妇XXXX性| 国产精品无码一区二区三区电影 | 亚洲AV永久无码精品蜜芽| 国产伦子沙发午休系列资源曝光| 天堂中文最新版在线中文| 公交车上噗嗤一声尽根而没| 色天使综合婷婷国产日韩AV| 丰满日韩放荡少妇无码视频| 少妇高潮惨叫喷水正在播放| 公侵犯玩弄漂亮人妻优| 四虎永久在线精品国产馆V视影院| 成人免费看的A级毛片| 日本无人区码卡二卡三卡| 成熟丰满熟妇自慰XXXXX| 少妇被又大又粗又爽毛片久久黑人| 粉嫩Av网站在线观看| 特级做A爰片毛片免费看| 国产传媒精品1区2区3区 | 日本插槽X8插槽怎么用的| 大陆老太XXXXXHD| 糖心短视频VLOG柚子猫| 国产精品久久久久一区二区三区| 无码午夜成人1000部免费视频| 国产毛片精选好视频| 亚洲AV专区无码观看精品天堂 | 国产精品青青青高清在线| 亚洲AV无码国产丝袜在线观看 | 欧洲无线一线二线三W955| 草莓视频免费观看| 天天狠天天透天天爱综合| 国产女人精品视频国产灰线| 亚洲国产成人精品无码一区二区 | 无遮挡啪啪摇乳动态图GIF| 好吊色欧美一区二区三区四区| 亚洲熟妇色XXXXX高潮喷水| 免费久久99精品国产自在现| 啊灬啊灬啊灬快灬高潮了视频网站 | 四季亚洲精品成人AV无码网站| 国产偷国产偷精品高清尤物 | 久爱无码精品免费视频在线观看 | 国产成人亚洲综合无码AⅤ| 性啪啪CHINESE东北女人| 精品九九人人做人人爱| 找老女人泻火对白自拍| 人妻丰满熟妇无码区免费| 国产成人 综合 亚洲欧美| 亚洲AV无码国产在丝袜APP| 久久天天躁夜夜躁狠狠I女人| A级国产乱理伦片在线播放| 上面一个摸下面一个手念什么| 国产亚洲VA综合人人澡精品| 夜里18款禁用B站入口探APP | 午夜无码视频在线观看网站| 亚洲AV无码国产在丝袜APP| 久久久久无码国产精品一区| AV永久天堂一区二区三区| 熟妇人妻系列AV无码一区二区 | 亚洲乱码尤物193YW最新地址| 蜜臀AV午夜福利一区二区三区| 成人毛片18女人毛片免费看快色| 性荡视频播放在线视频7777| 看全色黄大色黄女片爽在线看| 差差差很疼视频30分钟无掩盖| 性猛交ⅩXXX富婆video| 老年镖客视频大全播放| 成人免费乱码大片A毛片| 亚洲AV无码一区二区二三区| 免费A级毛片18禁网站APP| 国产GAYSEXCHINA男| 亚洲深深色噜噜狠狠网站| 人妻有码ΑV中文字幕久久琪琪布| 国产精品无码一本二本三本色| 一区二区三区在线 | 欧洲| 日韩精品人妻一区二区三区| 精品国产乱码久久久久久下载 | 最新在线精品国产福利| 特级做A爰片毛片免费看108| 久久香蕉国产线看观看手机| 公与憩止痒小说400章| 一本大道久久精品 东京热| 少女たちよ在线观看动漫4|