Rumah >hujung hadapan web >tutorial js >Fahami dengan cepat penunjuk prestasi dalam Node.js

Fahami dengan cepat penunjuk prestasi dalam Node.js

青灯夜游
青灯夜游ke hadapan
2021-09-16 10:10:183367semak imbas

Artikel ini akan membawa anda melalui penunjuk prestasi Node.js saya harap ia akan membantu anda!

Fahami dengan cepat penunjuk prestasi dalam Node.js

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.

  • BFFLapisan tengah, proksi antara muka, bertindak sebagai lapisan get laluan

  • Membangunkan alat binaan gulp, webpack adalah berdasarkan Node. 🎜>

  • Jika Node.js digunakan untuk bahagian hadapan

    , maka Electron dan

    akan menjadi yang utama
  • Jika NodeJS digunakan untuk kerja berkaitan ketekunan data, maka SSR dan

    akan mempunyai kadar penghunian yang tinggi; dan dalam kebanyakan senario,
  • ,
dan

boleh dikatakan kepada; menjadi kesesakan prestasi utama Node . SSRCPUKebaikan dan Kelemahan网络性能瓶颈

node.js tahan kerosakan dan prestasinya tidak begitu baikI/O磁盘

node.js pangkalan data operasi tidak profesionalCPU内存网络

node.js kuat dalam mengendalikan io tak segerak

  • 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 telah

dan

.

Fahami dengan cepat penunjuk prestasi dalam Node.js

Panggil balik belum selesai

: Panggilan balik I/O yang pelaksanaannya ditangguhkan sehingga lelaran gelung seterusnya.

terbiar, sediakan
    : hanya digunakan secara dalaman oleh sistem.
  • PollingsetTimeout(): 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.
  • 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

Generasi Lama

: 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内存

Kami akan menerangkan penunjuk prestasi daripada tahap sistem dan tahap proses Node.js

Tahap sistem

Untuk tahap pelayan (

,

,

, dsb.), penunjuk pemantauan berikut adalah disediakan:

Penggunaan memori

Kadar penggunaan

物理机虚拟机DockerBeban sistem, bilangan proses sedang digunakan/proses menunggu

  • Sistem

  • CPUPenunjuk Prestasi Keras

  • Disk Penggunaan

  • QPS Statistik

  • Tahap proses
  • GC

    Untuk setiap proses Node.js, penunjuk pemantauan berikut disediakan:
  • 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

  • Penunjuk tahap sistem boleh diperolehi dalam dua cara berikut

    1 modul os

    const os = requie('os')

    contoh kod

    Fahami dengan cepat penunjuk prestasi dalam Node.js

    Hasil pelaksanaan

    Fahami dengan cepat penunjuk prestasi dalam Node.js

    2 Arahan atas dan iostat menyemak memori dan penggunaan cakera keras

    [parameter] atas

    Fahami dengan cepat penunjuk prestasi dalam Node.js

    iostat[parameter]

    Fahami dengan cepat penunjuk prestasi dalam Node.js

    Penggunaan memori

    //该方法返回 Node.js 进程的内存使用情况的对象
    process.memoryUsage()

    Contoh Kod

    Fahami dengan cepat penunjuk prestasi dalam Node.js

    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:

Fahami dengan cepat penunjuk prestasi dalam Node.js

Surih GC

V8 menyediakan banyak pilihan parameter untuk permulaan program node.js Anda boleh mendapatkan maklumat log GC melalui kod contoh berikut

Fahami dengan cepat penunjuk prestasi dalam Node.js

<.>Hasil pelaksanaan nod --trace_gc

Anda dapat melihat bahawa V8 menggunakan proses GC yang berbeza untuk memori baharu dan lama

Fahami dengan cepat penunjuk prestasi dalam Node.js

Syot Kilat Memori

Fahami dengan cepat penunjuk prestasi dalam Node.js

Jika pemeriksa nod digunakan, akan terdapat gangguan pembolehubah bahagian hadapan dalam syot kilat. Adalah disyorkan untuk menggunakan

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 ab

1Fahami dengan cepat penunjuk prestasi dalam Node.js

Anda boleh melihat hasil berjalan di atas

Salah satu QPS kami: 4301.28/s

Tempoh purata setiap permintaan: 23ms

Kadar penghantaran : 617.47kb/s

Kebocoran 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:

  • 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

Jadi bagaimana untuk menyemak kebocoran memori? Anda boleh menggunakan alatan berikut

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(&#39;heapdump&#39;)

Dapatkan

Kaedah 1: Perintah

kill -USR2 <pid></pid>

1Fahami dengan cepat penunjuk prestasi dalam Node.js

方式二:调用writeSnapshot

heapdump.writeSnapshot(&#39;./&#39; + Date.now() + &#39;.heapsnapshot&#39;);

chrome面板分析

1Fahami dengan cepat penunjuk prestasi dalam Node.js

二. alinode

阿里云也提供了Nodejs应用的性能平台alinode,可以很方便、全面的为我们收集性能指标数据,同时以可视化图表的方式,更加的直观。接入alinode可参考5分钟快速入门

以下是部分采集数据图表展示

1Fahami dengan cepat penunjuk prestasi dalam 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 > 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!

Kenyataan:
Artikel ini dikembalikan pada:掘金--比心FE. Jika ada pelanggaran, sila hubungi admin@php.cn Padam