這篇文章帶大家了解一下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容錯,效能不是很好
- ##node.js操作資料庫不專業
- node.js處理非同步io強
- io密集型,不適合cpu密集型
- 計時器
- :此階段執行已經被 setTimeout() 和
setInterval()
的調度回呼函數。 待定回呼 - :執行延遲到下一個循環迭代的 I/O 回呼。 idle, prepare
- :僅系統內部使用。 輪詢
- :檢索新的I/O 事件;執行與I/O 相關的回呼(幾乎在所有情況下,除了關閉的回呼函數,那些由計時器和 setImmediate() 調度的之外),其餘情況node 將在適當的時候在此阻塞。
- :setImmediate() 回呼函數在這裡執行。
- :一些關閉的回呼函數,如:socket.on('close', ...)
我們知道Node.js® 是一個基於
Chrome V8 引擎的JavaScript 執行環境,同時它又是單執行緒的。 其中
V8記憶體 分為新生代與老生代:
:採用from空間->to空間記憶體回收scavenge演算法
老生代:採用引用標記、碎片整理的形式進行記憶體回收如果GC時間過長,會導致js執行緒阻塞,影響服務效能。記憶體使用不當,則會造成記憶體溢位。在了解了以上Node.js的基礎知識之後,我們再來看效能指標
效能指標
我們從系統層面和Node.js進程層面進行一個效能指標描述
系統層面針對伺服器(
實體機、虛擬機器
、Docker
等)級別,提供以下監控指標:
- 記憶體使用
- CPU
使用率
系統負載,使用中進程/等待進行的進程數 - 系統
- QPS
- 磁碟使用率
- GC
統計量
##… …
#針對每個Node.js 進程,提供以下監控指標:
堆內(total 和used)和堆外記憶體統計- #堆內各個記憶體空間佔用記憶體統計
- 垃圾回收(GC)佔整個行程運行時間比例
- QPS
- 以1s、15s、30s、60s 的CPU 統計
- libuv 句柄,定時器統計
- #…
- 如何取得
針對上面講到的效能指標,我們該如何取得呢?
系統層面# 系統層面的指標可以透過以下兩種方式取得 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日誌的資訊記憶體快照
heapdump 用來保存記憶體快照,使用 devtool 檢視記憶體快照。使用 heapdump 儲存記憶體快照時,只會有 Node.js 環境中的對象,不會受到干擾。後面會介紹heapdump的使用
壓力測試
#專案上線前是要進行壓力測試的,透過壓力測試來尋找是否存在內存洩漏壓測工具:ab測試(ApacheBench)、autocannon
下面展示了使用ab功能進行壓力測試的結果
上述運行結果可以看到
我們的一個QPS:4301.28/sec每個請求的平均長度:23ms#傳輸率:617.47kb/s記憶體洩漏
#Node.js相對比較專業的後端語言Java、PHP等,一些基礎的建置相對是不夠完善的。加上單執行緒的特點,在大型的應用當中,很容易造成伺服器或Node.js進程的效能瓶頸。 造成node記憶體洩漏通常有以下三種情況:- node v8本身記憶體大小的限制:64 位元系統約為1.4GB,32 位元系統約為0.7GB。
- 程式使用不當:全域變數參考、閉包使用不當、事件監聽未銷毀
- 大檔案應用程式:應該使用buffer操作, buffer不佔用v8記憶體
工具使用
#一。heapdump:產生記憶體快照chrome面板分析
const heapdump = require('heapdump')###### 取得##########方式一:指令###kill -USR2
方式二:调用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中文網其他相關文章!

Vercel是什么?本篇文章带大家了解一下Vercel,并介绍一下在Vercel中部署 Node 服务的方法,希望对大家有所帮助!

gm是基于node.js的图片处理插件,它封装了图片处理工具GraphicsMagick(GM)和ImageMagick(IM),可使用spawn的方式调用。gm插件不是node默认安装的,需执行“npm install gm -S”进行安装才可使用。

本篇文章带大家详解package.json和package-lock.json文件,希望对大家有所帮助!

本篇文章给大家分享一个Nodejs web框架:Fastify,简单介绍一下Fastify支持的特性、Fastify支持的插件以及Fastify的使用方法,希望对大家有所帮助!

如何用pkg打包nodejs可执行文件?下面本篇文章给大家介绍一下使用pkg将Node.js项目打包为可执行文件的方法,希望对大家有所帮助!

node怎么爬取数据?下面本篇文章给大家分享一个node爬虫实例,聊聊利用node抓取小说章节的方法,希望对大家有所帮助!

本篇文章给大家分享一个Node实战,介绍一下使用Node.js和adb怎么开发一个手机备份小工具,希望对大家有所帮助!

先介绍node.js的安装,再介绍使用node.js构建一个简单的web服务器,最后通过一个简单的示例,演示网页与服务器之间的数据交互的实现。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。