亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node.js中性能指標的示例分析

發布時間:2021-09-16 10:42:13 來源:億速云 閱讀:278 作者:小新 欄目:web開發

小編給大家分享一下Node.js中性能指標的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

對于我們前端工程師來說,掌握Node.js應用開發是我們走上資深/專家的一條必經之路。此外Node.js是一門服務端語言,我們不僅要能夠完成開發任務,而且更應該要關注服務器性能。

應用場景

在介紹NodeJS性能指標之前呢,我們先來看看它的應用場景,針對不同的應用場景,所要關注的性能指標是有所不同的。

  • BFF中間層,接口的代理,充當網關層

  • 開發構建工具gulpwebpack基于Node.js

  • 桌面應用程序Electron和Node.js結合

  • SSR服務端渲染

Node.js如果是用于前端SSR的話,那么CPU網絡就會成為主要的性能瓶頸

如果使用NodeJS來進行數據持久化相關的工作,那么I/O磁盤會有很高的占用率;

而在大多數場景下,CPU內存以及網絡可以說是Node的主要性能瓶頸。

優缺點

  • node.js容錯,性能不是很好

  • node.js操作數據庫不專業

  • node.js處理異步io強

  • io密集型,不適合cpu密集型

事件循環(libuv)

這里引用官網的一張圖,展示了事件循環操作順序的簡化概覽

Node.js中性能指標的示例分析

階段描述

  • 定時器:本階段執行已經被 setTimeout()setInterval() 的調度回調函數。

  • 待定回調:執行延遲到下一個循環迭代的 I/O 回調。

  • idle, prepare:僅系統內部使用。

  • 輪詢:檢索新的 I/O 事件;執行與 I/O 相關的回調(幾乎所有情況下,除了關閉的回調函數,那些由計時器和 setImmediate() 調度的之外),其余情況 node 將在適當的時候在此阻塞。

  • 檢測setImmediate() 回調函數在這里執行。

  • 關閉的回調函數:一些關閉的回調函數,如:socket.on('close', ...)

V8 GC機制

我們知道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模塊

const os = requie('os')

代碼示例

Node.js中性能指標的示例分析

執行結果

Node.js中性能指標的示例分析

2、top和iostat命令查看內存和硬盤使用

top [參數]

Node.js中性能指標的示例分析

iostat[參數]

Node.js中性能指標的示例分析

內存使用情況

//該方法返回 Node.js 進程的內存使用情況的對象
process.memoryUsage()

代碼示例

Node.js中性能指標的示例分析

執行結果:

{
  rss: 4935680,
  heapTotal: 1826816,
  heapUsed: 650472,
  external: 49879
}復制代碼

名詞解釋:

rss 是駐留集大小, 是給這個進程分配了多少物理內存(占總分配內存的一部分)

一般這個指標上升,可能會發生內存泄漏

heapTotal 和 heapUsed 代表 V8 的內存使用情況。

external 代表 V8 管理的,綁定到 Javascript 的 C++ 對象的內存使用情況。

CPU profile

一般來說,如果涉及到內存泄漏的,可以抓取 堆快照,那如果是 CPU 異常飆高的,可以抓取 CPU Profile

可通過以下兩種方式進行獲取:

Node.js中性能指標的示例分析

GC trace

V8提供了很多node.js程序啟動的參數選項,通過以下實例代碼的方式可以獲取到GC日志的信息

Node.js中性能指標的示例分析

node --trace_gc的執行結果

可以看到V8對于新老內存采用不同的GC過程

Node.js中性能指標的示例分析

內存快照

Node.js中性能指標的示例分析

如果使用 node-inspector 的話,快照中會有前端的變量干擾。推薦使用 heapdump 用來保存內存快照,使用 devtool 來查看內存快照。使用 heapdump 保存內存快照時,只會有 Node.js 環境中的對象,不會受到干擾。后面會介紹heapdump的使用

壓力測試

項目上線前是要進行壓力測試的,通過壓力測試來尋找是否存在內存泄漏

壓測工具:ab測試(ApacheBench)、autocannon

下面展示了使用ab功能進行壓力測試的結果

Node.js中性能指標的示例分析

上述運行結果可以看到

我們的一個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面板分析

需要注意的是,打印內存快照是很耗 CPU 的操作,可能會對線上業務造成影響。

引入

const heapdump = require('heapdump')

獲取

方式一:命令 kill -USR2 <pid>

Node.js中性能指標的示例分析

方式二:調用writeSnapshot

heapdump.writeSnapshot('./' + Date.now() + '.heapsnapshot');

chrome面板分析

Node.js中性能指標的示例分析

二. alinode

阿里云也提供了Nodejs應用的性能平臺alinode,可以很方便、全面的為我們收集性能指標數據,同時以可視化圖表的方式,更加的直觀。接入alinode可參考5分鐘快速入門

以下是部分采集數據圖表展示

Node.js中性能指標的示例分析

一些指標描述

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 = 1:即將有任務需要額外的等待時間才能被處理,需要引起關注;

    • Load > 5:任務需要等待時間很長,需要干預處理。

    • 通常先看 load15,如果很高,再看 load1load5,看是否有下降趨勢,短時間內 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中性能指標的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海南省| 中江县| 巴彦淖尔市| 莱芜市| 万州区| 修水县| 无为县| 保德县| 醴陵市| 乌鲁木齐市| 拉萨市| 瓦房店市| 富蕴县| 襄樊市| 屏边| 东阿县| 涪陵区| 全州县| 福海县| 永昌县| 大同县| 绥滨县| 琼中| 苗栗县| 花莲县| 汉沽区| 玛多县| 县级市| 益阳市| 开原市| 张家口市| 南和县| 杂多县| 樟树市| 鄂温| 潜江市| 视频| 平舆县| 锡林郭勒盟| 稻城县| 收藏|