Rumah >hujung hadapan web >tutorial js >Fahami dengan cepat penunjuk prestasi dalam Node.js
Artikel ini akan membawa anda melalui penunjuk prestasi Node.js saya harap ia akan membantu anda!
Bagi kami jurutera hadapan, menguasai Node.js
pembangunan aplikasi adalah satu-satunya cara untuk kami menjadi senior/pakar. Selain itu, Node.js ialah bahasa sebelah pelayan Kita bukan sahaja harus dapat menyelesaikan tugas pembangunan, tetapi juga memberi perhatian kepada prestasi pelayan. [Pembelajaran yang disyorkan: "Tutorial nodejs"]
Artikel ini akan memberikan beberapa pengenalan awal kepada asas dan penunjuk prestasi Node.js.
Sebelum memperkenalkan penunjuk prestasi NodeJS
, mari kita lihat senario aplikasinya untuk senario aplikasi yang berbeza, penunjuk prestasi yang perlu dibimbangkan adalah berbeza.
BFF
Lapisan tengah, proksi antara muka, bertindak sebagai lapisan get laluan
Membangunkan alat binaan gulp
, webpack
adalah berdasarkan Node. 🎜>
, maka Electron
dan
Jika NodeJS digunakan untuk kerja berkaitan ketekunan data, maka SSR
dan
boleh dikatakan kepada; menjadi kesesakan prestasi utama Node . SSR
CPU
Kebaikan dan Kelemahan网络
性能瓶颈
node.js tahan kerosakan dan prestasinya tidak begitu baikI/O
磁盘
node.js pangkalan data operasi tidak profesionalCPU
内存
网络
dan
. Panggil balik belum selesai: Panggilan balik I/O yang pelaksanaannya ditangguhkan sehingga lelaran gelung seterusnya.
terbiar, sediakansetTimeout()
: mendapatkan semula acara I/O baharu; melaksanakan panggilan balik berkaitan I/O (dalam hampir semua kes, kecuali untuk panggilan balik penutupan, yang dikendalikan oleh pemasa dan setInterval()
Kecuali untuk penjadualan ), dalam kes lain, nod akan menyekat di sini pada masa yang sesuai. setImmediate()
Mekanisme GC V8setImmediate()
socket.on('close', ...)
Generasi baharu : Gunakan penandaan rujukan dan pemecahan untuk kitar semula memoriJika masa GC terlalu lama, ia akan menyebabkan utas js disekat dan menjejaskan prestasi perkhidmatan. Penggunaan memori yang tidak betul akan menyebabkan limpahan memori. Selepas memahami pengetahuan asas Node.js di atas, mari kita lihat penunjuk prestasi
Penunjuk prestasiV8内存
Tahap sistem
Untuk tahap pelayan (
,
,
Penggunaan memori
Kadar penggunaan物理机
虚拟机
Docker
Beban sistem, bilangan proses sedang digunakan/proses menunggu
Sistem
CPU
Penunjuk Prestasi Keras
Disk Penggunaan
QPS
Statistik
…
GC
Statistik memori yang diduduki oleh setiap ruang memori dalam timbunan
Perkadaran kutipan sampah (GC) dalam keseluruhan masa berjalan prosesBagaimana untuk mendapatkan
Penunjuk tahap sistem boleh diperolehi dalam dua cara berikut
1 modul os
const os = requie('os')
contoh kod
Hasil pelaksanaan
2 Arahan atas dan iostat menyemak memori dan penggunaan cakera keras
[parameter] atas
iostat[parameter]
Penggunaan memori
//该方法返回 Node.js 进程的内存使用情况的对象 process.memoryUsage()
Contoh Kod
Hasil pelaksanaan:
{ rss: 4935680, heapTotal: 1826816, heapUsed: 650472, external: 49879 }复制代码
Penjelasan kata nama:
rss ialah saiz set pemastautin, iaitu jumlah memori fizikal yang diperuntukkan kepada proses ini (sebahagian daripada jumlah memori yang diperuntukkan)
Secara amnya, apabila penunjuk ini meningkat, 内存泄漏
heapTotal mungkin berlaku dan heapUsed mewakili penggunaan memori V8.
luaran mewakili penggunaan memori objek C yang terikat pada Javascript yang diuruskan oleh V8.
Profil CPU
Secara umumnya, jika ia melibatkan kebocoran ingatan, anda boleh mengambil gambar timbunan, kemudian Jika CPU luar biasa tinggi, anda boleh ambil CPU Profile
yang boleh diperolehi dalam dua cara berikut:
Surih GC
V8 menyediakan banyak pilihan parameter untuk permulaan program node.js Anda boleh mendapatkan maklumat log GC melalui kod contoh berikut
<.>Hasil pelaksanaan nod --trace_gcAnda dapat melihat bahawa V8 menggunakan proses GC yang berbeza untuk memori baharu dan lamaSyot Kilat Memori
Jika pemeriksa nod digunakan, akan terdapat gangguan pembolehubah bahagian hadapan dalam syot kilat. Adalah disyorkan untuk menggunakanheapdump untuk menyimpan petikan memori dan gunakan devtool untuk melihat petikan memori. Apabila anda menggunakan heapdump untuk menyimpan petikan memori, hanya objek dalam persekitaran Node.js tidak akan terganggu. Penggunaan akan diperkenalkan kemudianheapdump
Alat ujian tekanan: ujian ab (ApacheBench), autocannon
Berikut menunjukkan keputusan ujian tekanan menggunakan fungsi abAnda boleh melihat hasil berjalan di atas
Salah satu QPS kami: 4301.28/sTempoh purata setiap permintaan: 23ms Kadar penghantaran : 617.47kb/s1. heapdump: Jana analisis panel krom snapshot memori
Perlu diingat bahawa mencetak syot kilat memori adalah operasi yang sangat intensif CPU dan mungkin memberi kesan kepada perniagaan dalam talian.Perkenalkan
const heapdump = require('heapdump')
Dapatkan
Kaedah 1: Perintahkill -USR2 <pid></pid>
方式二:调用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
更多编程相关知识,请访问:编程入门!!
Atas ialah kandungan terperinci Fahami dengan cepat penunjuk prestasi dalam Node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!