PM2 Configuration, Logs, Restart, dan Application Troubleshooting
Mengelola log PM2, rotasi log, restart yang aman, serta mendiagnosis error umum aplikasi Node.js di produksi.
Aplikasi produksi pasti mengalami masalah. Kemampuan membaca log, memilih jenis restart yang tepat, dan memahami error umum Node.js akan mempercepat pemulihan.
1. Melihat log
pm2 logs
pm2 logs app-prod
pm2 logs app-prod --lines 200
pm2 logs app-prod --err
pm2 logs app-prod --out| Perintah | Fungsi |
|---|---|
pm2 logs | Semua log aplikasi |
--lines | Jumlah baris terakhir |
--err | Hanya stderr |
--out | Hanya stdout |
--timestamp | Tampilkan waktu |
Lokasi log default: ~/.pm2/logs/. Jika memakai error_file/out_file di ecosystem, log berada
di path tersebut.
Membersihkan log
pm2 flush app-prod
pm2 flush2. Rotasi log
Log yang membesar bisa memenuhi disk. Gunakan pm2-logrotate:
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 20M
pm2 set pm2-logrotate:retain 14
pm2 set pm2-logrotate:compress true
pm2 set pm2-logrotate:rotateInterval '0 0 * * *'Cek konfigurasi:
pm2 conf pm2-logrotateRotasi juga untuk log aplikasi
Jika aplikasi menulis log sendiri (mis. Winston/Pino), gunakan logrotate sistem untuk file
tersebut. PM2 logrotate hanya menangani log PM2.
3. Restart, reload, stop
pm2 restart app-prod
pm2 reload app-prod
pm2 stop app-prod
pm2 start app-prod
pm2 delete app-prod
pm2 restart all| Perintah | Efek |
|---|---|
restart | Stop lalu start, downtime singkat |
reload | Ganti proses bertahap (cluster), zero-downtime |
stop | Hentikan tanpa menghapus konfigurasi |
delete | Hapus dari daftar PM2 |
restart all | Restart semua aplikasi |
Kapan memakai reload?
- Aplikasi berjalan di cluster mode.
- Perubahan kode sudah di-build.
- Anda ingin meminimalkan downtime.
Gunakan restart bila aplikasi tidak mendukung cluster atau ada perubahan konfigurasi yang butuh
mulai ulang penuh.
4. Melihat detail proses
pm2 describe app-prod
pm2 show app-prod
pm2 env 0
pm2 listInformasi penting:
- Status dan uptime.
- Jumlah restart.
- Penggunaan CPU/RAM.
- Script, cwd, interpreter.
- Environment variables.
Restart count yang terus naik menandakan aplikasi crash berulang.
5. Error umum dan solusinya
EADDRINUSE
Error: listen EADDRINUSE: address already in use :::3000Penyebab: port sudah dipakai proses lain.
ss -tulpn | grep :3000
pm2 list
lsof -i :3000Solusi: hentikan proses lama atau ganti PORT.
MODULE_NOT_FOUND
Error: Cannot find module 'express'Penyebab: dependensi belum terpasang, cwd salah, atau NODE_PATH berbeda.
cd /srv/app
npm ci
pm2 describe app-prod | grep -E 'cwd|script'Pastikan cwd di ecosystem mengarah ke direktori aplikasi.
ENOMEM / heap out of memory
JavaScript heap out of memorySolusi:
- Naikkan
max_memory_restartdengan hati-hati. - Perbaiki memory leak.
- Tambah RAM atau jumlah instance.
- Set
NODE_OPTIONS=--max-old-space-size=...bila perlu.
pm2 restart app-prod --update-env
free -h
pm2 monitPermission denied
ls -l /srv/app
namei -l /srv/app/server.jsPastikan user PM2 dapat membaca file dan menulis ke direktori log.
Aplikasi restart berulang
pm2 logs app-prod --lines 100
pm2 describe app-prod
journalctl -u pm2-deploy -n 100Cari error pertama, bukan hanya error terakhir.
Environment tidak terbaca
pm2 env 0
pm2 restart app-prod --update-envSetelah mengubah .env, jalankan --update-env atau pm2 reload ecosystem.config.js.
6. Health check dan kesiapan produksi
Tambahkan endpoint health check di aplikasi:
app.get('/health', (req, res) => {
res.status(200).json({ status: 'ok', uptime: process.uptime() });
});Uji:
curl -f http://127.0.0.1:3000/healthGunakan health check setelah deployment untuk memastikan aplikasi benar-benar siap.
7. Checklist troubleshooting
-
pm2 listmenunjukkan statusonline. -
pm2 logstidak menunjukkan error berulang. - Port aplikasi listen dan tidak konflik.
- Environment dan
.envterbaca. - Permission file dan log benar.
- RAM/CPU tidak mentok.
- Reverse proxy mengarah ke port yang benar.
- Disk tidak penuh.
- Log berotasi.
Praktik: diagnosa aplikasi down
# 1. Status
pm2 list
# 2. Log terakhir
pm2 logs app-prod --lines 100 --err
# 3. Detail
pm2 describe app-prod
# 4. Port
ss -tulpn | grep :3000
# 5. Resource
free -h
df -h
pm2 monit
# 6. Uji lokal
curl -I http://127.0.0.1:3000Ikuti urutan ini sebelum mengubah konfigurasi. Sering kali akar masalah terlihat di log atau pada port yang konflik.
Ringkasan
pm2 logsdanpm2 describeadalah alat diagnosa utama.- Rotasi log mencegah disk penuh.
reloaduntuk zero-downtime,restartuntuk mulai ulang penuh.- Pahami error umum: port konflik, modul hilang, memory, dan permission.
- Biasakan health check setelah deploy.
Selanjutnya
Masuk ke containerisasi di Docker Architecture: Image, Container, Network, dan Volume.
PM2 Production Setup, Process Management, dan Environment Management
Menjalankan aplikasi Node.js di produksi dengan PM2, ecosystem file, cluster mode, environment, dan startup otomatis.
Docker Architecture: Image, Container, Network, dan Volume
Memahami komponen Docker, siklus hidup container, jaringan, volume, registry, serta perintah dasar yang wajib dikuasai.