Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk menyemak memori dalam nodejs

Bagaimana untuk menyemak memori dalam nodejs

WBOY
WBOYasal
2023-05-25 15:04:371948semak imbas

Node.js, sebagai bahasa pengaturcaraan bahagian pelayan moden, biasanya mengendalikan sejumlah besar data dan permintaan serentak. Oleh itu, dalam proses membangunkan dan mengendalikan aplikasi ini, adalah penting untuk mengesan memori yang diduduki oleh aplikasi. Artikel ini akan menerangkan cara menyemak penggunaan memori aplikasi anda dalam Node.js.

Cara memori digunakan dalam Node.js

Node.js menggunakan dua jenis memori: ingatan timbunan dan ingatan tindanan.

Memori timbunan ialah tempat objek yang diperuntukkan secara dinamik disimpan dalam Node.js, seperti tatasusunan, objek dan rentetan. Semasa program dijalankan, ia secara dinamik memohon ruang dalam ingatan timbunan. Ini bermakna saiz memori timbunan adalah berubah-ubah dan oleh itu akan berbeza-beza mengikut saiz bergantung pada operasi dan keperluan aplikasi.

Sebaliknya, memori tindanan mengendalikan panggilan fungsi JavaScript. Setiap kali fungsi dipanggil, pembolehubah dan argumen dalamannya disimpan pada timbunan. Apabila fungsi menyelesaikan pelaksanaan, bingkai tindanan muncul dan ruang memori dilepaskan.

Pengurusan memori Node.js dan pengumpulan sampah

Dalam Node.js, pengurusan memori dilakukan oleh enjin V8. Enjin V8 ialah enjin JavaScript yang dibangunkan oleh Google dan digunakan untuk menyusun dan melaksanakan kod JavaScript.

Dalam Node.js, V8 bertanggungjawab untuk menguruskan memori timbunan dan pengumpulan sampah. Pengumpulan sampah ialah proses automatik yang mengesan dan mengosongkan ruang memori yang tidak lagi digunakan. Pengumpul sampah V8 adalah berdasarkan algoritma sapu tanda Semasa program berjalan, ia mengimbas memori timbunan dan menandakan objek yang dirujuk itu. Selepas itu, ia mengosongkan objek yang tidak dirujuk dan melepaskan ruang yang didudukinya.

Alat Semak Memori dalam Node.js

Terdapat banyak alatan dalam Node.js yang boleh membantu anda menyemak penggunaan memori.

  1. process.memoryUsage()

Dalam Node.js, kaedah process.memoryUsage() boleh mengesan memori yang digunakan oleh aplikasi semasa. Kaedah ini mengembalikan objek yang mengandungi penggunaan memori proses pada masa ini. Objek yang dikembalikan oleh kaedah ini mempunyai sifat berikut:

  • rss – Saiz Set Residen, jumlah memori fizikal yang sedang digunakan oleh proses (termasuk bahagian yang diduduki oleh perpustakaan kongsi). | digunakan untuk memori timbunan Bahagian terpakai
  • luaran - Jumlah bilangan soket sistem yang sedang digunakan oleh proses
  • Penggunaan memori timbunan boleh disemak secara berkala dengan menggunakan kaedah process.memoryUsage() untuk memahami penggunaan memori Aplikasi dan pengumpulan sampah.
  • Kod berikut menunjukkan cara menggunakan kaedah process.memoryUsage() untuk menyemak penggunaan memori:
const used = process.memoryUsage();
for (let key in used) {
 console.log(`${key} ${Math.round(used[key] / 1024 / 1024 * 100) / 100} MB`);
}

Menjalankan kod ini akan mengeluarkan penggunaan memori aplikasi semasa ke konsol.

v8.getHeapStatistics()

    Kaedah v8.getHeapStatistics() mengembalikan objek, yang mengandungi statistik mengenai peruntukan memori timbunan, kitar semula memori, dsb. di bawah V8 maklumat enjin.
  1. Objek yang dikembalikan melalui kaedah ini mengandungi sifat berikut:

total_heap_size — jumlah saiz timbunan

total_heap_size_executable — saiz kod boleh laku
  • total_physical_size — Jumlah saiz timbunan dan jumlah saiz perpustakaan kongsi
  • total_available_size — Saiz memori tersedia untuk peruntukan
  • used_heap_size — Saiz memori timbunan terpakai
  • had_saiz_timbunan — Had saiz timbunan
  • memori_malloced — Jumlah saiz memori yang diperuntukkan di luar timbunan
  • memori_malloced_puncak — Saiz memori yang diperuntukkan secara luaran terbesar yang pernah berlaku
  • does_zap_garbage — Nilai Boolean yang menunjukkan sama ada hendak melaksanakan kutipan sampah
  • Kod berikut menunjukkan cara menggunakan kaedah v8.getHeapStatistics() untuk menyemak penggunaan memori:
  • const v8 = require('v8');
    const used = v8.getHeapStatistics();
    for (let key in used) {
     console.log(`${key} ${Math.round(used[key] / 1024 / 1024 * 100) / 100} MB`);
    }
  • Menjalankan kod ini akan mengeluarkan statistik timbunan pada konsol.

heapdump

    heapdump ialah modul Node.js yang membolehkan anda menjana syot kilat timbunan memori semasa. Modul ini menjana fail bernama heapdump-YYYYMMDD_HHMMSS.heapsnapshot untuk analisis lanjut tentang penggunaan memori aplikasi.
  1. Menggunakan modul heapdump memerlukan pemasangan melalui npm. Masukkan arahan berikut dalam terminal untuk memasang modul heapdump:
npm install heapdump --save

Kod berikut menunjukkan cara menggunakan modul heapdump untuk menjana syot kilat memori:

const heapdump = require('heapdump');
heapdump.writeSnapshot((err, filename) => {
   console.log(`Heap dump written to ${filename}`);
});

Kod di atas akan menjana syot kilat timbunan memori semasa dan Simpan dalam fail yang ditentukan. Fail ini kemudiannya boleh dianalisis menggunakan pelbagai alat untuk mencari penggunaan memori aplikasi.

Ringkasan

Artikel ini memperkenalkan asas pengurusan memori dan pengumpulan sampah dalam Node.js, dan cara menggunakan beberapa alatan untuk melihat penggunaan memori aplikasi anda. Apabila kita membangunkan dan mengekalkan aplikasi yang besar, adalah sangat penting untuk memahami penggunaan memori. Menggunakan alatan di atas boleh membantu kami menemui dan menyelesaikan masalah memori yang berkemungkinan tepat pada masanya untuk memastikan prestasi dan kestabilan aplikasi.

Atas ialah kandungan terperinci Bagaimana untuk menyemak memori dalam nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn