Bagaimana memeriksa penggunaan memori dalam javascript?

Proses. metode memoryUsage() adalah metode bawaan dari modul proses yang memberikan informasi tentang proses saat ini atau runtime dari sebuah Node. program js. Metode penggunaan memori mengembalikan objek yang menjelaskan penggunaan memori dalam byte dari Node. proses js

Untuk Node. js engineer, kebocoran memori dalam aplikasi bisa menjadi mimpi buruk di mana kebangkitan tidak selalu semudah menangis di malam hari. Nyatanya, semakin lama kebocoran ini tidak terdeteksi, semakin lama mimpi buruk itu bisa berlarut-larut

Artinya, CPU, penggunaan memori, rata-rata beban, dan waktu respons aplikasi dengan bug kebocoran memori akan meningkat hingga CPU mencapai 100% dari kapasitasnya, setelah itu layanan akan berhenti merespons. Ini adalah gejala yang mungkin dihadapi pengembang saat aplikasi mengalami kebocoran memori

Jika Anda menjadi pengembang seperti itu, baca terus dan cari tahu cara mengatasi gejala ini dan cara memantau penggunaan memori dan kebocoran memori di Node. aplikasi js

Apa itu 'Kebocoran Memori' di Node. js?

Secara sederhana, kebocoran memori adalah masalah di mana aplikasi mengalokasikan blok memori tanpa mengosongkannya atau di mana Node. Mekanisme Pengumpul Sampah js tidak berhasil menyapunya

Nah, semacam

Apa itu Pengumpulan Sampah di Node. js?

Sebagai permulaan, kita harus membawa Pengumpul Sampah ke dalam persamaan saat membahas topik kebocoran memori. Dalam istilah yang lebih sederhana, Pengumpul Sampah adalah mekanisme otomatis yang berperan untuk merebut kembali memori yang ditempati oleh benda-benda yang tidak terpakai.

Pada siklus pertama (disebut "tanda"), Pengumpul Sampah menandai objek yang tidak terpakai untuk dihapus. Pada siklus kedua, "sweep", memori diperoleh kembali

Contoh aplikasi dengan kebocoran memori

Untuk keperluan tutorial, saya telah membuat Express. js di mana setiap permintaan ke aplikasi membuat larik kebocoran bertambah selama masa pakainya, sehingga memperlambat layanan. Tidak ada array kebocoran ini yang dihapus secara manual, dan pengumpulan sampah juga tidak memengaruhi variabel yang dideklarasikan secara global. Meskipun masalah di sini mungkin tampak jelas, dalam kehidupan nyata kebocoran seperti itu dapat dengan mudah tidak terdeteksi dan menyebabkan beberapa kejutan yang agak tidak diinginkan di kemudian hari.

Untungnya, kami memiliki beberapa tindakan di toko untuk memastikan hal ini tidak terjadi

Mendeteksi Kebocoran Memori dengan Node-Inspector dan Chrome Devtools

Untuk menggunakan Inspektur Node, kita harus menjalankan aplikasi kita dalam mode inspeksi, dan dalam naskah CLI

simpul --periksa indeks. js

Sebagai output, Anda harus mendapatkan sesuatu yang mirip dengan saya

➜  simpul pelatihan kebocoran memori --periksa index. js

Debugger mendengarkan di ws. //127. 0. 0. 1. 9229/315b2c9a-daff-46fc-83fc-9cb822603970

Untuk bantuan, lihat. https. //nodejs. org/en/docs/inspektur

App mendengarkan pada port 5000

Debugger terpasang

Selain Chrome Devtools Anda, Anda harus memulai dengan menyuntikkan skrip kami.  

Jika Devtools Anda gagal memulai, arahkan ke

chrome. //memeriksa

Di browser chrome Anda, klik tombol konfigurasikan

Kemudian tambahkan alamat IP dan port dari keluaran Node Inspector -- dalam kasus saya localhost. 9229

Klik selesai

Anda kemudian harus mendapatkan skrip Anda dengan opsi inspeksi seperti yang tercantum di tab Devtools/devices.  

Klik periksa untuk memasang Chrome Devtools ke Node Script.  

Dalam kasus kami, kami tertarik pada tab dan opsi memori.  

Untuk menguji apakah aplikasi kita mengalami kebocoran memori, kita akan mengambil 3 snapshot heap. Yang pertama adalah setelah memulai server; . Ini akan menunjukkan kepada kita apakah aplikasi membutuhkan lebih banyak memori selama masa pakainya

Untuk benchmark, saya akan menggunakan Apache Benchmark yang diinstal secara default di mesin Mac saya dan perintah CLI saya untuk itu adalah

ab -n 1000 -c 50 127. 0. 0. 1. 5000/

3 Snapshot Kebocoran Memori di Node. js

Lanjutkan dan hasilkan lalu lintas dengan metode apa pun yang disukai. Sekarang mari kita ambil beberapa snapshot heap.  

Oke, yang pertama adalah setelah server dimulai -- 6 MB

Yang kedua adalah setelah tolok ukur pertama dari 1000 permintaan dan tiba-tiba kami diberi tanda peringatan, karena heap kami sekarang telah berkembang menjadi 6. 7MB

Jadi mari kita lakukan snapshot terakhir setelah tolok ukur kedua.  

Dan lagi, nilai yang lebih besar menegaskan kecurigaan kami bahwa aplikasi tersebut mengalami kebocoran memori. Jadi. mari kita cari penyebabnya

Pilih snapshot ketiga seperti pada screenshot di bawah ini;

Bandingkan dengan snapshot pertama.  

Kami sekarang dapat melihat bahwa kami telah memperoleh beberapa objek dan tanggal baru sejak memulai server. Di sini, percobaan kami dimulai.  

Pertama, mari kita lihat lebih dekat objek ini. Kemudian, kita harus mencari objek dengan ukuran alokasi yang sama. Sepertinya kami memiliki banyak dengan ukuran alokasi 56. Ini harus menjadi kebocoran memori kita.  

Saat membukanya, kami melihat bahwa objek tersebut berasal dari kebocoran memori yang telah kami siapkan.  

bocor. dorong ({ baz. { foo. persyaratan. header}, waktu. Tanggal baru() });

Jadi sekarang, mari kita lihat objek tanggal. Apakah itu menunjuk ke kunci waktu dalam skrip bocor kami?

Dan voila -- bocoran di Node. js terdeteksi sepenuhnya

Kesimpulan - Ketahui Alat Anda

Dari sini, jika Anda tetap menggunakan pustaka yang terkenal dan teruji, Anda akan menemukan perbaikan Node apa pun. kebocoran memori js tugas yang jauh lebih mudah daripada mengidentifikasi satu di tempat pertama. Penting untuk ini, tentu saja, memiliki pemahaman penuh tentang pengumpulan sampah di Devtools serta yang lainnya yang Anda gunakan saat membangun aplikasi Anda. Dengan berbagai debugger, cather kebocoran, dan generator grafik penggunaan yang Anda inginkan, keterampilan Anda yang baru disempurnakan dalam mengisolasi kebocoran di mana dan kapan Anda menemukannya akan memastikan kinerja perangkat lunak Anda lebih cepat dan lebih efisien

Di Startup Development House, kami akui kami sedikit ahli dalam menggunakan Node. js dan memang menyelesaikan masalah apa pun yang kami temui saat melakukannya. Jika Anda seorang calon pengembang dan dapat menggunakan sedikit keahlian ini, silakan hubungi hello@start-up. rumah

Bagaimana cara memeriksa penggunaan memori JavaScript?

Visualisasikan konsumsi memori dengan profiler kinerja​ . Untuk mencobanya, buka DevTools di Chrome dan alihkan ke tab Performa . Perhatikan bahwa kami menggunakan jendela Penyamaran saat mengukur performa.

Berapa banyak memori yang dimiliki JavaScript?

JavaScript menggunakan angka floating point presisi ganda (64-bit). 64 bit adalah 8 byte, tetapi setiap angka sebenarnya menghabiskan rata-rata 9. 7 byte . Demikian pula, Chrome menunjukkan ukuran setiap larik kosong sebagai 32 byte dan ukuran setiap objek kosong sebagai 56 byte.

Bagaimana cara memeriksa status memori saya?

Cara Memeriksa Penggunaan Memori di Linux, 5 Perintah Sederhana .
perintah cat untuk Menampilkan Informasi Memori Linux
Perintah bebas untuk Menampilkan Jumlah Memori Fisik dan Swap
Perintah vmstat untuk Melaporkan Statistik Memori Virtual
Perintah atas untuk Memeriksa Penggunaan Memori
Perintah htop untuk Menemukan Beban Memori dari Setiap Proses

Bagaimana cara memeriksa kebocoran memori di JavaScript?

Untuk melihat apa yang terjadi dengan memori Anda, mari lakukan langkah-langkah berikut. .
Pilih radio 'Allocation instrumentation on timeline' dari tab Memori DevTools
Klik tombol 'Rekam'
Klik tombol 'Simpan Data'
Tunggu beberapa detik untuk mendapatkan hasilnya
Klik tombol 'Berhenti merekam'
Klik tombol 'Data gratis'