Berikut cara melakukan profiling Express.js menggunakan Node.js Performance Hooks dan clinic.js untuk mengetahui penyebab penggunaan CPU dan RAM yang tinggi.
1. Profiling dengan Node.js Performance Hooks
Node.js menyediakan modul perf_hooks untuk mengukur waktu eksekusi fungsi dan request.
Langkah 1: Tambahkan Performance Hooks di Express.js
Buat middleware untuk mengukur waktu eksekusi setiap request.
const express = require("express");const { performance, PerformanceObserver } = require("perf_hooks");
const app = express();const port = 3000;
// Middleware untuk mengukur waktu requestapp.use((req, res, next) => { const start = performance.now(); res.on("finish", () => { const duration = performance.now() - start; console.log(`Request ${req.method} ${req.url} selesai dalam ${duration.toFixed(2)} ms`); }); next();});
app.get("/", (req, res) => { res.send("Hello World!");});
app.listen(port, () => {});
Langkah 2: Jalankan Server dan Lihat Output
node server.js
Kemudian akses beberapa endpoint, misalnya http://localhost:
. Console akan menampilkan durasi eksekusi setiap request.
2. Profiling dengan Clinic.js
clinic.js adalah alat yang lebih kuat untuk menganalisis CPU, RAM, dan event loop.
Langkah 1: Install clinic.js
npm install -g clinic
Langkah 2: Jalankan Profiling dengan Clinic.js
clinic doctor -- node server.js
Lalu akses beberapa endpoint dan tekan Ctrl + C untuk menghentikan proses. Clinic.js akan membuat laporan HTML yang bisa dibuka di browser.
Langkah 3: Analisis Hasil
Buka laporan yang dibuat Clinic.js untuk melihat:
- Memory Leak → jika penggunaan RAM terus naik tanpa turun.
- Event Loop Blocking → jika ada proses yang menghambat performa.
- CPU Usage → jika terlalu tinggi karena proses berat.
Kesimpulan
- Gunakan Performance Hooks untuk analisis cepat.
- Gunakan Clinic.js untuk laporan lebih mendalam.
- Optimasi berdasarkan hasil profiling, misalnya:
- Kurangi query database yang berat.
- Gunakan caching (Redis).
- Optimalkan middleware yang tidak perlu.
- Gunakan PM2 cluster mode untuk load balancing.
Coba jalankan profiling di proyekmu dan kasih tahu hasilnya, biar kita bisa optimasi lebih lanjut! 🚀
No comments:
Post a Comment