這篇文章帶大家了解一下Node.js的效能指標,希望對大家有幫助!
對我們前端工程師來說,掌握Node.js
應用程式開發是我們走上資深/專家的一條必經之路。另外Node.js是一門服務端語言,我們不僅要能夠完成開發任務,更應該要專注在伺服器效能上。 【推薦學習:《nodejs 教學》】
本文就針對Node.js的基礎與效能指標做一些初步的介紹。
在介紹NodeJS
效能指標之前呢,我們先來看看它的應用場景,針對不同的應用場景,所要關注的效能指標是有所不同的。
BFF
中間層,介面的代理,充當網關層
開發建置工具gulp
,webpack
基於Node.js
桌面應用程式Electron
和Node.js結合
SSR
服務端渲染
Node.js如果是用於前端SSR
的話,那麼CPU
和網路
就會成為主要的效能瓶頸
;
如果使用NodeJS來進行資料持久化相關的工作,那麼I/O
和磁碟
會有很高的佔用率;
而在大多數場景下,CPU
、記憶體
以及網路
可以說是Node的主要效能瓶頸。
node.js容錯,效能不是很好
setInterval()
的調度回呼函數。
的JavaScript 執行環境,同時它又是單執行緒的。 其中
V8記憶體 分為新生代與老生代:
:採用from空間->to空間記憶體回收scavenge演算法
老生代:採用引用標記、碎片整理的形式進行記憶體回收如果GC時間過長,會導致js執行緒阻塞,影響服務效能。記憶體使用不當,則會造成記憶體溢位。在了解了以上Node.js的基礎知識之後,我們再來看效能指標
效能指標
系統層面針對伺服器(
實體機、虛擬機器
、Docker
等)級別,提供以下監控指標:
使用率
統計量
#針對每個Node.js 進程,提供以下監控指標:
堆內(total 和used)和堆外記憶體統計# 系統層面的指標可以透過以下兩種方式取得 1、os模組 程式碼範例 執行結果 2、top和iostat指令查看記憶體和硬碟使用 top [參數] iostat[參數] 記憶體使用量##const os = requie('os')
//该方法返回 Node.js 进程的内存使用情况的对象
process.memoryUsage()
程式碼範例
執行結果:
{ rss: 4935680, heapTotal: 1826816, heapUsed: 650472, external: 49879 }复制代码
名詞解釋:
rss 是駐留集大小, 是給這個程序分配了多少物理記憶體(佔總分配記憶體的一部分)一般這個指標上升,可能會發生記憶體洩漏
CPU profile
一般來說,如果涉及到記憶體洩漏的,可以抓取堆快照,那如果是CPU 異常飆高的,可以抓取CPU Profile
GC trace
V8提供了許多node.js程式啟動的參數選項,透過以下實例程式碼的方式可以取得到GC日誌的資訊node --trace_gc的執行結果可以看到V8對於新舊記憶體採用不同的GC過程記憶體快照
如果使用node-inspector 的話,快照中會有前端的變數幹擾。建議使用heapdump 用來保存記憶體快照,使用 devtool 檢視記憶體快照。使用 heapdump 儲存記憶體快照時,只會有 Node.js 環境中的對象,不會受到干擾。後面會介紹heapdump的使用
壓測工具:ab測試(ApacheBench)、autocannon
下面展示了使用ab功能進行壓力測試的結果
上述運行結果可以看到
我們的一個QPS:4301.28/sec每個請求的平均長度:23ms#傳輸率:617.47kb/s#一。heapdump:產生記憶體快照chrome面板分析
const heapdump = require('heapdump')
方式二:调用writeSnapshot
heapdump.writeSnapshot('./' + Date.now() + '.heapsnapshot');
chrome面板分析
二. alinode
阿里云也提供了Nodejs应用的性能平台alinode,可以很方便、全面的为我们收集性能指标数据,同时以可视化图表的方式,更加的直观。接入alinode可参考5分钟快速入门
以下是部分采集数据图表展示
一些指标描述
Memory
memory_sys
:系统内存使用百分比。memory_node
: 所有 Node.js 进程内存使用之和占系统内存的百分比。CPU
cpu_sys
:系统 CPU 使用百分比。cpu_node
:所有 Node.js 进程 CPU 使用百分比之和。Load
load1
:1分钟内平均 Load。
load5
:5分钟内平均 Load。
load15
:15分钟内平均 Load。
下面是一些 Load
的参考信息 (Load
已经归一化处理,如果是 N 核 CPU,那么相应 Load * N
):
0.7 :不错的状态,有新任务也可以及时处理;
Load = 1
:即将有任务需要额外的等待时间才能被处理,需要引起关注;Load > 5
:任务需要等待时间很长,需要干预处理。load15
,如果很高,再看 load1
和 load5
,看是否有下降趋势,短时间内 load1
大于 1,不用担心,如果长时间 Load
较高,需要引起关注。QPS
该实例所有 Node.js 进程每秒钟处理的 HTTP 请求数之和。
GC
gc_avg
:所有 Node.js 进程垃圾回收时间占比平均值。gc_max
:每分钟内垃圾回收时间最多的 Node.js 进程的垃圾回收时间占比。三. 开源Easy-Monitor
企业级 Node.js 应用性能监控与线上故障定位解决方案。
Easy-Monitor是一款轻量级的Node性能监控工具。快速入口
我们也可以给予它的基础之上去搭建部署一套自己内部的性能平台。
以上是我关于Node.js性能指标以及获取的简单介绍,更多的是对包含性能点的一个整体上的介绍,那针对每个性能指标我们都可以去再做更深入的研究。希望这篇文章能够帮助你,同时也感谢你的阅读,期待再见~
Node.js 性能平台
如何分析 Node.js 中的内存泄漏
本文示例代码
原文地址:https://juejin.cn/post/7008006326857138184
作者:比心FE
更多编程相关知识,请访问:编程入门!!
以上是快速搞懂Node.js中的效能指標的詳細內容。更多資訊請關注PHP中文網其他相關文章!