← Kembali ke daftar artikelArtikel

Mengatasi "Zombie Process" dan Memory Leak pada Aplikasi Next.js / Node.js di cPanel

🗓 2 Agustus 2026✍️ Admin Sekolah

Bagi pengembang web yang memicu aplikasi berbasis Next.js atau Node.js di lingkungan shared hosting (cPanel) atau VPS, masalah penumpukan proses (Number of Processes / NPROC) dan penggunaan RAM Virtual yang melonjak sering kali menjadi kendala utama.


Sering kali, setelah proses pembaruan kode (deployment) atau restart aplikasi, proses versi lama tidak berhenti secara sempurna. Proses ini tetap menggantung di latar belakang—dikenal sebagai Zombie Process—yang terus memakan resource server secara diam-diam.


Gejala Masalah

  • Dashboard cPanel menampilkan indikator Number of Processes (NPROC) mendekati atau menyentuh batas 100%.

  • Muncul pesan kesalahan Error 508 (Resource Limit Reached) saat mengakses situs.

  • Aplikasi terasa lambat merespons meskipun statistik CPU terhitung rendah.

Panduan Langkah Demi Langkah Penanganan

Langkah 1: Mengidentifikasi Proses yang Menggantung

Langkah pertama adalah memeriksa seluruh proses milik akun Anda di terminal SSH.

Jalankan perintah berikut untuk melihat daftar proses next-server atau node:

Bash
ps aux | grep -E 'next-server|node'

Cara membaca output:

  • Perhatikan kolom PID (Process ID).

  • Perhatikan kolom START / TIME. Jika ada proses yang aktif dari beberapa hari atau minggu lalu, proses tersebut kemungkinan besar menggantung.

  • Perhatikan kolom VIRT dan RES untuk melihat konsumsi memori virtual dan RAM fisik.

Langkah 2: Melacak Lokasi Direktori Proyek

Sebelum menghentikan proses, pastikan Anda mengetahui folder proyek mana yang menjalankan skrip tersebut dengan perintah pwdx:

Bash
pwdx <PID_1> <PID_2>

Contoh Penggunaan:

Bash
pwdx 3842793 3871895

Output:

Plaintext
3842793: /home/user/app-sekolah
3871895: /home/user/app-sekolah

Jika ditemukan beberapa PID menunjuk ke direktori yang sama, berarti terjadi eksekusi ganda (duplicate processes).

Langkah 3: Menghentikan Proses Zombie

Hentikan spesifik proses yang tidak terpakai menggunakan perintah kill -9:

Bash
kill -9 <PID_1> <PID_2>

Jika Anda ingin membersihkan seluruh instance Node.js / Next.js sekaligus untuk memulai dari keadaan bersih:

Bash
killall -9 node next-server

Skrip Otomasi: Restart Aman Tanpa Zombie Process

Agar proses ganda tidak terjadi lagi setiap kali Anda melakukan update aplikasi, gunakan skrip Bash pembersih berikut.

Buat file bernama restart-app.sh di folder proyek Anda:

Bash
nano restart-app.sh

Tempelkan skrip berikut:

Bash
#!/bin/bash

# 1. Tentukan folder proyek Anda
APP_DIR="/home/USER/PROJECT_DIR"

echo "=== Memulai Proses Restart Aplikasi ==="

# 2. Hentikan semua proses Next.js / Node yang aktif di background
echo "Mematikan instance lama..."
pkill -f "next-server" || true

# 3. Pindah ke direktori aplikasi
cd $APP_DIR

# 4. Jalankan ulang aplikasi di latar belakang
echo "Menjalankan aplikasi baru..."
nohup npm run start > app.log 2>&1 &

echo "=== Restart Selesai. Aplikasi Berjalan Bersih ==="

Berikan izin eksekusi pada skrip tersebut:

Bash
chmod +x restart-app.sh

Setiap kali ingin merestart aplikasi, cukup jalankan ./restart-app.sh.