ホームページ >ウェブフロントエンド >jsチュートリアル >Node.js のパフォーマンス指標をすぐに理解する
この記事では、Node.js のパフォーマンス指標について説明します。お役に立てば幸いです。
私たちフロントエンド エンジニアにとって、Node.js
アプリケーション開発をマスターすることが、シニア/エキスパートになる唯一の方法です。また、Node.js はサーバーサイド言語であるため、開発タスクを完了できるだけでなく、サーバーのパフォーマンスにも注意を払う必要があります。 [推奨学習: "nodejs チュートリアル "]
この記事では、Node.js の基本とパフォーマンス指標について予備的な紹介をします。
NodeJS
パフォーマンス インジケーターを紹介する前に、まずそのアプリケーション シナリオを見てみましょう。アプリケーション シナリオが異なると、注目するパフォーマンス インジケーターは異なります。 。
BFF
中間層、つまりインターフェイスのプロキシは、ゲートウェイ層として機能します
開発および構築ツールgulp
、webpack
Node.js に基づく
デスクトップ アプリケーションElectron
と Node.js を組み合わせた
SSR
サーバーサイドレンダリング
Node.js がフロントエンドに使用されている場合 SSR
、その場合、CPU
と Network
が主な パフォーマンス ボトルネックになります
;
NodeJS を使用してデータ永続化関連の作業を実行する場合、 I/O
および Disk
の占有率は高くなります。
ほとんどのシナリオでは、CPU
、Memory
、および ネットワーク
ノードの主なパフォーマンスのボトルネックと言えます。
node.js はフォールト トレラントですが、パフォーマンスはあまり良くありません
node.js操作データベースは専門的ではありません
node.js は非同期 io の処理に優れています
io 集中型ですが、CPU 集中型には適していません
これは公式 Web サイトから引用した図で、イベント ループの操作シーケンスの概要を簡略化して示しています
フェーズの説明
setTimeout()
となっているスケジュール コールバック関数を実行します。および setInterval()
。 setImmediate() によって駆動されます
スケジューリングを除く)、その他の場合、ノードは適切なタイミングでここでブロックされます。 setImmediate()
ここでコールバック関数が実行されます。
に基づく JavaScript ランタイム環境であり、シングルスレッドであることがわかっています。
V8 メモリ は新世代と旧世代に分かれています:
: スペースからスペースへのメモリ リサイクル スカベンジ アルゴリズムを使用します
旧世代: 参照マーキングとデフラグメンテーションの形式でのメモリのリサイクルGC 時間が長すぎると、JS スレッドがブロックされ、サービスに影響を及ぼします。パフォーマンス。メモリを不適切に使用すると、メモリ オーバーフローが発生します。上記の Node.js の基本知識を理解した後、パフォーマンス指標を見てみましょう
パフォーマンス指標
システム レベル##サーバーの場合 (物理マシン
、仮想マシン、
Dockerなど) レベルで、次の監視指標を提供します:
#メモリ使用量
CPU
使用率システム負荷、使用中/進行を待機しているプロセスの数
QPS
ハード パフォーマンス インジケーター
ヒープ内 (合計および使用済み) およびオフヒープ メモリの統計情報 ##ヒープ内の各メモリ領域が占有するメモリ統計
システムレベルのインジケーターは、次の 2 つの方法で取得できます
1. os モジュール
const os = requie('os')
コード例
実行結果
2. top および iostat コマンドを使用して、メモリとハードディスクを確認します。
top [パラメータ]
iostat[パラメータ]
メモリ使用量
//该方法返回 Node.js 进程的内存使用情况的对象 process.memoryUsage()
コード例
実行結果:
{ rss: 4935680, heapTotal: 1826816, heapUsed: 650472, external: 49879 }复制代码
名詞の説明:
rss が常駐しています セット サイズは、このプロセスに割り当てられている物理メモリの量です (割り当てられた合計メモリの一部)
一般に、このインジケータが増加すると、メモリ リークが発生する可能性があります
heapTotal と heapused は、V8 のメモリ使用量を表します。
external は、V8 によって管理される Javascript にバインドされた C オブジェクトのメモリ使用量を表します。
CPU プロファイル
一般的に、メモリ リークが関係する場合は、ヒープ スナップショットを取得してから、 CPU の負荷が異常に高い場合は、CPU プロファイル
# を取得できます。これは次の 2 つの方法で取得できます。
GC トレース
V8 には、node.js プログラムの起動用の多くのパラメーター オプションが用意されています。次のサンプル コードを通じて GC ログ情報を取得できます
node --trace_gc の実行結果
#V8 では新しいメモリと古いメモリに対して異なる GC プロセスが使用されていることがわかります。
##メモリ スナップショット
ノードインスペクターを使用すると、スナップショットにフロントエンド変数の干渉が発生します。メモリ スナップショットを保存するには heapdump を使用し、メモリ スナップショットを表示するには devtool を使用することをお勧めします。 heapdump を使用してメモリ スナップショットを保存すると、Node.js 環境内のオブジェクトのみが中断されません。 heapdump
の使用については後で紹介します
プロジェクトをオンラインにする前に、ストレス テストを行って、問題がないかどうかを確認する必要があります。ストレス テストによるメモリ リーク
ストレス テスト ツール: ab テスト (ApacheBench)、autocannon
以下は ab 関数を使用したストレス テストの結果を示します
上記の実行結果を確認できます。
QPS の 1 つ: 4301.28/秒
平均継続時間各リクエスト: 23ms
送信速度: 617.47kb/s
メモリ スナップショットの印刷は CPU を非常に消費する操作であり、オンライン ビジネスに影響を与える可能性があることに注意してください。
はじめに
const heapdump = require('heapdump')Get
方法 1: コマンド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 中国語 Web サイトの他の関連記事を参照してください。