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