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.
Senario Aplikasi
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 laluanMembangunkan alat binaan
gulp
,webpack
adalah berdasarkan Node. 🎜>- Jika Node.js digunakan untuk bahagian hadapan
, maka
akan menjadi yang utamaElectron
dan -
Jika NodeJS digunakan untuk kerja berkaitan ketekunan data, maka
akan mempunyai kadar penghunian yang tinggi; dan dalam kebanyakan senario,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
内存
网络
- intensif io, tidak sesuai untuk intensif CPU
- Gelung acara (libuv) Berikut ialah gambar yang dipetik daripada tapak web rasmi, menunjukkan gambaran keseluruhan ringkas bagi urutan operasi gelung acara
- Penerangan fasa
Pemasa
: Peringkat ini melaksanakan fungsi panggil balik penjadualan yang telahdan
.: Panggilan balik I/O yang pelaksanaannya ditangguhkan sehingga lelaran gelung seterusnya.
terbiar, sediakan- : hanya digunakan secara dalaman oleh sistem.
-
Polling
setTimeout()
: 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 dansetInterval()
Kecuali untuk penjadualan ), dalam kes lain, nod akan menyekat di sini pada masa yang sesuai. - Pengesanan: Fungsi panggil balik dilaksanakan di sini.
- Tutup fungsi panggil balik : Beberapa fungsi tutup balik, seperti:
-
setImmediate()
Mekanisme GC V8 - Kami tahu Node.js ® ialah persekitaran masa jalan JavaScript berdasarkan enjin Chrome V8 dan ia adalah satu benang.
setImmediate()
Antaranya, - terbahagi kepada generasi baharu dan generasi lama:
socket.on('close', ...)
Generasi baharu : menerima pakai daripada angkasa->kepada algoritma penghapusan kitar semula memori angkasa
: 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 (
,
,, dsb.), penunjuk pemantauan berikut adalah disediakan:
Penggunaan memori
Kadar penggunaan物理机
虚拟机
Docker
Beban sistem, bilangan proses sedang digunakan/proses menunggu
Sistem
CPU
Penunjuk Prestasi KerasDisk Penggunaan
QPS
Statistik…
- Tahap proses
-
Untuk setiap proses Node.js, penunjuk pemantauan berikut disediakan:GC
- Dalam timbunan (jumlah dan digunakan) dan luar timbunan statistik memori
Statistik memori yang diduduki oleh setiap ruang memori dalam timbunan
Perkadaran kutipan sampah (GC) dalam keseluruhan masa berjalan proses- QPS
- Statistik CPU sebanyak 1s, 15s, 30s, 60s
- penangan libuv, statistik pemasa
- ...
Bagaimana untuk mendapatkan
- Bagaimana kita memperoleh prestasi penunjuk yang dinyatakan di atas?
- Tahap sistem
- Had saiz memori nod v8 itu sendiri: sistem 64-bit ialah kira-kira 1.4GB, 32-bit sistem adalah kira-kira 0.7GB.
- Penggunaan program yang tidak betul: rujukan pembolehubah global, penggunaan penutupan yang tidak betul, pendengar acara tidak dimusnahkan
- Aplikasi fail besar: operasi penimbal hendaklah digunakan, Penampan tidak menduduki memori v8
-
memory_sys
:系统内存使用百分比。 -
memory_node
: 所有 Node.js 进程内存使用之和占系统内存的百分比。 -
cpu_sys
:系统 CPU 使用百分比。 -
cpu_node
:所有 Node.js 进程 CPU 使用百分比之和。 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
较高,需要引起关注。
-
gc_avg
:所有 Node.js 进程垃圾回收时间占比平均值。 -
gc_max
:每分钟内垃圾回收时间最多的 Node.js 进程的垃圾回收时间占比。
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
Syot Kilat Memori
heapdump 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
Ujian Tekanan
Sebelum projek ditayangkan dalam talian, ujian tekanan diperlukan untuk mengetahui sama ada terdapat kebocoran memori
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/sKebocoran memori
Node.js ialah bahasa back-end yang agak profesional Java, PHP, dsb., tetapi beberapa pembinaan asas adalah agak tidak lengkap. Ditambah dengan ciri utas tunggal, dalam aplikasi yang besar, ia mudah menyebabkan kesesakan prestasi dalam pelayan atau proses Node.js. Biasanya terdapat tiga situasi yang menyebabkan kebocoran memori nod:Penggunaan alatan
1. 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>
方式二:调用writeSnapshot
heapdump.writeSnapshot('./' + Date.now() + '.heapsnapshot');
chrome面板分析
二. alinode
阿里云也提供了Nodejs应用的性能平台alinode,可以很方便、全面的为我们收集性能指标数据,同时以可视化图表的方式,更加的直观。接入alinode可参考5分钟快速入门
以下是部分采集数据图表展示
一些指标描述
Memory
CPU
Load
QPS
该实例所有 Node.js 进程每秒钟处理的 HTTP 请求数之和。
GC
三. 开源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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





Artikel ini akan memberi anda pemahaman yang mendalam tentang memori dan pengumpul sampah (GC) enjin NodeJS V8 saya harap ia akan membantu anda!

Perkhidmatan Node yang dibina berdasarkan bukan sekatan dan dipacu peristiwa mempunyai kelebihan penggunaan memori yang rendah dan sangat sesuai untuk mengendalikan permintaan rangkaian besar-besaran. Di bawah premis permintaan besar-besaran, isu yang berkaitan dengan "kawalan memori" perlu dipertimbangkan. 1. Mekanisme kutipan sampah V8 dan had ingatan Js dikawal oleh mesin kutipan sampah

Memilih imej Docker untuk Node mungkin kelihatan seperti perkara remeh, tetapi saiz dan potensi kelemahan imej itu boleh memberi kesan yang ketara pada proses dan keselamatan CI/CD anda. Jadi bagaimana kita memilih imej Node.js Docker yang terbaik?

Modul fail ialah enkapsulasi operasi fail asas, seperti membaca/menulis/membuka/menutup/memadam fail, dsb. Ciri terbesar modul fail ialah semua kaedah menyediakan dua versi **segerak** dan ** asynchronous**, dengan Kaedah dengan akhiran penyegerakan adalah semua kaedah penyegerakan, dan kaedah yang tidak semuanya adalah kaedah heterogen.

Node 19 telah dikeluarkan secara rasmi Artikel ini akan memberi anda penjelasan terperinci tentang 6 ciri utama Node.js 19. Saya harap ia akan membantu anda!

Bagaimanakah Node.js melakukan GC (pengumpulan sampah)? Artikel berikut akan membawa anda melaluinya.

Gelung peristiwa ialah bahagian asas Node.js dan mendayakan pengaturcaraan tak segerak dengan memastikan bahawa utas utama tidak disekat Memahami gelung peristiwa adalah penting untuk membina aplikasi yang cekap. Artikel berikut akan memberi anda pemahaman yang mendalam tentang gelung acara dalam Node.

Bagaimana untuk membungkus fail boleh laku nodejs dengan pkg? Artikel berikut akan memperkenalkan kepada anda cara menggunakan pkg untuk membungkus projek Node ke dalam fail boleh laku. Saya harap ia akan membantu anda!
