Mengatasi "Zombie Process" dan Memory Leak pada Aplikasi Next.js / Node.js di cPanel
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:
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:
pwdx <PID_1> <PID_2>
Contoh Penggunaan:
Bashpwdx 3842793 3871895Output:
Plaintext3842793: /home/user/app-sekolah 3871895: /home/user/app-sekolahJika 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:
kill -9 <PID_1> <PID_2>
Jika Anda ingin membersihkan seluruh instance Node.js / Next.js sekaligus untuk memulai dari keadaan bersih:
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:
nano restart-app.sh
Tempelkan skrip berikut:
#!/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:
chmod +x restart-app.sh
Setiap kali ingin merestart aplikasi, cukup jalankan ./restart-app.sh.
