Memahami Sumber High CPU Usage pada Aplikasi Node.js dengan Chrome DevTools Profiling

Rizzalbayu
SkyshiDigital
Published in
3 min readMar 23, 2023
Image by Drawkit

Pendahuluan

Setiap pengembangan sistem yang sudah terjadi, terdapat beberapa masalah yang dapat ditemukan saat sistem sudah berada pada level production. misalnya saja tentang performa, contohnya sistem yang mengonsumsi CPU yang tinggi. Dengan konsumsi CPU yang tinggi dapat membuat response time sistem menjadi lebih lambat dan berdampak pada setiap pengguna. Untuk mengetahui function yang menyebabkan penggunaan CPU tinggi, dapat menggunakan profiling. Profiling merupakan proses yang digunakan untuk identifikasi dan menyelesaikan permasalahan tentang performa.

Penyebab High CPU

Beberapa penyebab dari penggunaan CPU yang tinggi seperti:

  • Looping dan iteration. setiap pengulangan atau iterasi yang terjadi dapat membuat penggunaan CPU menjadi tinggi jika melakukan proses yang sangat panjang. Terutama jika memiliki data yang sangat banyak.
  • Recursive function. mirip seperti sebelumnya, function yang dipanggil secara rekursif dapat memberikan penggunaan CPU yang tinggi.

Chrome DevTools profiling

Tool yang dapat digunakan untuk profiling salah satunya Chrome DevTools Profiling. Chrome DevTools profiling sebuah fitur dari Chrome yang digunakan untuk menganalisis masalah performa pada aplikasi web. Chrome DevTools profiling memberikan hasil berupa: penggunaan memory, penggunaan CPU, jumlah request, response time, dll. untuk dapat menggunakan Chrome DevTools profiling, input chrome://inspect pada search bar

Contoh

Sebagai contoh penggunaan Chrome DevTools profiling untuk mengetahui CPU Usage, akan dibuat sistem sederhana dengan node.js dan framework express js. sebelum itu, pastikan node.js dan npm sudah terinstal pada device.

Buat sebuah folder, dan masuk kedalam terminal.

Buat project baru dengan command npm init dan npm install express untuk menginstal express js

Buat file baru dengan nama index.js dan isi dengan kode berikut

const express = require('express');
const app = express();
const port = 3000;

app.get('/sum', (req, res) => {
let element = 0;
for (let index = 0; index <= 100000; index++) {
element += index;
}
res.send({ element: element });
});

app.listen(port, () => {
console.log(`App listening on port ${port}`);
});

Agar dapat dideteksi oleh Chrome DevTools profiling. Project perlu dijalankan dengan mode inspect.

Jalankan project dengan command node --inpect index.js

Masuk kedalam Chrome dan masukkan chrome://inspect/ pada search bar

Maka akan muncul Remote target. Klik inspect

Klik Start untuk memulai profiling, Lakukan request pada endpoint http://localhost:3000/sum lebih dari satu kali. Sebagai indikasi untuk sistem memiliki pengguna cukup banyak

Klik Stop untuk menghentikan proses. Kemudian akan muncul halaman detail dari profiling

Cari function yang memiliki self time atau total time yang tinggi untuk dilihat. Misalnya kita pilih index.js

Jika kita lihat pada baris 7, memiliki waktu yang cukup lama. Hal ini disebabkan oleh proses pengulangan sebanyak 100000 kali. Maka dari itu perlu dikurangi jika ingin memiliki response yang lebih cepat.

Jika kita kurangi jumlah pengulangan dan memulai lagi proses profiling, akan menghasilkan response yang lebih cepat. seperti dibawah ini

Penutup

Profiling merupakan salah satu cara untuk melihat penggunaan memory, penggunaan CPU pada sebuah sistem. salah satu tool yang dapat digunakan adalah Chrome DevTools profiling. dengan menggunakan Chrome DevTools dapat diketahui function yang memiliki response yang lama dan menyebabkan penggunaan CPU yang tinggi. serta kita juga dapat memperbaiki logic, dengan tujuan untuk mengurangi penggunaan dari CPU atau memory pada sistem.

--

--