Panduan troubleshooting server Debian secara detail, sistematis, dan mendalam. Dari gejala → diagnosis → solusi, lengkap dengan command dan contoh output terminal.
Isolasi — Ubah satu variabel saja setiap kali, catat hasilnya.
Dari luar ke dalam — Mulai dari network → service → aplikasi → data.
Dokumentasikan — Catat apa yang sudah dicoba agar tidak mengulang langkah yang sama.
Urutan Diagnosis Standar
DIAGNOSIS ORDER
# 1. Apakah server hidup dan bisa di-ping?ping -c 4 SERVER_IP
# 2. Apakah port service terbuka?nmap -p 22,80,443 SERVER_IP
ss -tulpn
# 3. Apakah service berjalan?systemctl status SERVICE
# 4. Apakah ada error di log?journalctl -u SERVICE -xe --no-pager | tail -50
journalctl -p err -b --no-pager | tail -30
# 5. Apakah resource cukup?df -h
free -h
uptime
Peringatan: Jangan langsung restart server atau service sebelum mengumpulkan log. Restart sering menghapus jejak error yang berharga.
02
TROUBLESHOOTING
SERVER TIDAK BISA DIAKSES (SSH / NETWORK)
Ini kasus paling sering. Gejala: tidak bisa SSH, website down, atau ping timeout. Ikuti langkah berurutan di bawah.
Q
Server tidak merespons ping sama sekali
Kemungkinan penyebab: Server mati, network interface down, firewall memblokir ICMP, atau masalah di sisi jaringan (routing/ISP).
LANGKAH DIAGNOSIS
# Dari mesin lokal Anda:ping -c 4 192.168.1.100
PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
From 192.168.1.1 icmp_seq=1 Destination Host Unreachable
--- 192.168.1.100 ping statistics ---
4 packets transmitted, 0 received, +4 errorstraceroute 192.168.1.100
# Lihat di hop mana paket berhenti# Jika Anda punya akses console (VPS panel / IPMI / KVM):ip link show
ip addr show
ip route show
systemctl status networking NetworkManager
Solusi yang sering berhasil:
Di VPS: cek status instance di panel provider (kadang server ter-suspend atau mati).
Interface down → sudo ip link set eth0 up lalu sudo dhclient eth0 atau restart networking.
Salah konfigurasi IP static → perbaiki di /etc/network/interfaces atau netplan, lalu sudo systemctl restart networking.
Kabel/virtual NIC terputus (di environment virtualisasi).
Q
Ping berhasil, tapi SSH timeout / connection refused
Ping OK berarti layer 3 (IP) hidup. Masalah ada di port 22, service SSH, atau firewall.
CEK PORT & SERVICE
nmap -p 22 SERVER_IP
PORT STATE SERVICE
22/tcp filtered ssh ← firewall memblokir
# atau
22/tcp closed ssh ← tidak ada yang listening
# atau
22/tcp open ssh ← port terbuka, masalah di auth/config# Di server (jika punya console):ss -tlnp | grep :22
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=789,fd=3))sudo systemctl status ssh
sudo journalctl -u ssh -xe --no-pager | tail -30
Penyelesaian umum:
Port filtered → Firewall (UFW/iptables/security group cloud) memblokir. Buka port: sudo ufw allow 22/tcp atau port custom Anda.
Port closed → Service SSH tidak berjalan: sudo systemctl start ssh && sudo systemctl enable ssh.
Port open tapi masih gagal → Cek /etc/ssh/sshd_config (AllowUsers, PermitRootLogin, Port). Restart ssh setelah ubah config.
Salah port: jika SSH di port 2222, gunakan ssh -p 2222 user@host.
Q
SSH minta password terus / Permission denied (publickey)
DEBUG SSH CLIENT
ssh -vvv user@SERVER_IP
# Output verbose menunjukkan tahap mana yang gagal
Penyebab & solusi:
Public key belum ada di ~/.ssh/authorized_keys di server.
Permission salah: ~/.ssh harus 700, authorized_keys harus 600, owned by user.
PasswordAuthentication no di sshd_config sementara key belum terpasang → Anda terkunci. Pakai console untuk perbaiki.
SELinux/AppArmor jarang jadi biang di Debian, tapi permission file sangat krusial.
Gejala klasik: aplikasi error "No space left on device", log berhenti tertulis, APT gagal, database crash. Segera diagnosa sebelum sistem makin rusak.
Q
Cara cepat menemukan penyebab disk penuh
DIAGNOSA DISK
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 20G 19G 200M 99% /
/dev/sda2 100G 40G 55G 43% /vardf -i
# Cek apakah inode yang habis (bukan space)Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 1310720 1310000 720 100% /sudo du -xh / --max-depth=2 2>/dev/null | sort -hr | head -20
# Tampilkan direktori paling borossudo find / -xdev -type f -size +100M 2>/dev/null | head -20
# Cari file lebih besar dari 100MB
Penjelasan:
df -h — Melihat penggunaan space per filesystem.
df -i — Melihat penggunaan inode. Bisa penuh meski space masih ada (banyak file kecil).
du -xh — Menghitung ukuran aktual isi direktori (abaikan mount lain).
Q
Solusi membersihkan disk dengan aman
PEMBERSIHAN AMAN
# 1. Hapus cache APTsudo apt clean
sudo apt autoclean
sudo apt autoremove --purge
# 2. Bersihkan journal log (simpan 3 hari terakhir)sudo journalctl --vacuum-time=3d
sudo journalctl --vacuum-size=200M
# 3. Hapus log lama yang sudah di-rotatesudo find /var/log -type f -name '*.gz' -delete
sudo find /var/log -type f -name '*.1' -delete
# 4. Bersihkan temporarysudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
# 5. Cek Docker jika terinstall (sering makan banyak space)sudo docker system prune -af
sudo docker volume prune -f
# 6. Setelah membersihkan, cek lagidf -h
Jangan sembarangan hapus isi /var/lib (database, docker data, dll) atau /home tanpa memastikan isinya.
Q
Disk penuh karena log yang meledak
Log bisa tumbuh sangat cepat jika aplikasi error berulang atau debug level terlalu verbose.
LOG MELEDAK
sudo du -sh /var/log/* | sort -hr | head -10
sudo tail -100 /var/log/syslog
sudo journalctl --disk-usage
# Batasi ukuran journal secara permanensudo nano /etc/systemd/journald.conf
# Set: SystemMaxUse=200Msudo systemctl restart systemd-journald
04
TROUBLESHOOTING
MEMORY / CPU TINGGI ATAU SERVER LELET
Server terasa lambat, load average tinggi, atau OOM (Out of Memory) killer aktif.
Q
Cara diagnosa memory pressure
CEK MEMORY
free -h
total used free shared buff/cache available
Mem: 3.8Gi 3.5Gi 100Mi 50Mi 200Mi 150Mi
Swap: 2.0Gi 1.8Gi 200Mips aux --sort=-%mem | head -15
# Proses paling boros RAMsudo dmesg | grep -i 'out of memory'
sudo journalctl -k | grep -i oom
# Cek apakah OOM killer pernah aktif
Interpretasi:
available sangat kecil + swap hampir penuh → memory pressure nyata.
Proses tertentu makan ratusan MB/GB → pertimbangkan restart service itu atau naikkan RAM.
OOM killer muncul di dmesg → kernel terpaksa membunuh proses. Cari proses yang di-kill dan perbaiki root cause (memory leak / under-provision).
Q
Cara diagnosa CPU tinggi
CEK CPU
uptime14:30:01 up 10 days, 3:22, 2 users, load average: 4.50, 3.80, 2.10# Load 4.5 di mesin 2-core = sudah overloadedtop -bn1 | head -20
ps aux --sort=-%cpu | head -15
mpstat 1 5
# Perlu paket sysstat: sudo apt install sysstat
Solusi umum:
Proses runaway → kill PID atau kill -9 PID (terakhir).
Swap membantu menghindari OOM, tetapi jauh lebih lambat dari RAM. Anggap ini solusi sementara, bukan pengganti upgrade RAM.
05
TROUBLESHOOTING
SERVICE GAGAL START / FAILED
Service menampilkan status failed atau inactive (dead) padahal seharusnya berjalan.
Q
Alur diagnosa service failed
DIAGNOSA SERVICE
systemctl --failed
UNIT LOAD ACTIVE SUB DESCRIPTION
● nginx.service loaded failed failed A high performance web serversudo systemctl status nginx
sudo journalctl -u nginx -xe --no-pager | tail -50
sudo systemctl cat nginx
# Lihat unit file yang dipakai
Penjelasan langkah:
systemctl --failed — Ringkasan semua unit yang gagal.
status — Menampilkan exit code + cuplikan log terakhir.
DNS resolution gagal (bisa ping IP, tidak bisa ping domain)
CEK DNS
cat /etc/resolv.conf
nameserver 8.8.8.8\nnameserver 1.1.1.1ping -c 2 8.8.8.8
# Jika ini berhasil, network OKping -c 2 google.com
# Jika ini gagal → masalah DNSdig google.com
nslookup google.com
resolvectl status
Solusi:
Isi /etc/resolv.conf dengan DNS publik (8.8.8.8 / 1.1.1.1).
Jika memakai systemd-resolved, edit /etc/systemd/resolved.conf lalu systemctl restart systemd-resolved.
Di cloud, kadang DNS internal provider wajib dipakai — cek dokumentasi VPS Anda.
Q
Routing / tidak ada default gateway
CEK ROUTING
ip route show
default via 192.168.1.1 dev eth0\n192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100# Jika tidak ada baris 'default via ...':sudo ip route add default via 192.168.1.1 dev eth0
# Lalu buat permanen di /etc/network/interfaces atau NetworkManager
07
TROUBLESHOOTING
WEB SERVER ERROR (NGINX / APACHE)
Q
502 Bad Gateway / 504 Gateway Timeout
Nginx/Apache berjalan, tapi backend (PHP-FPM, Node, upstream) tidak merespons.
DIAGNOSA 502/504
sudo systemctl status php8.2-fpm
sudo systemctl status nginx
sudo tail -50 /var/log/nginx/error.log
connect() failed (111: Connection refused) while connecting to upstream
upstream: "fastcgi://unix:/run/php/php8.2-fpm.sock"ss -tlnp | grep -E 'php|9000|3000'
# Pastikan backend listening
Solusi umum:
PHP-FPM mati → sudo systemctl restart php8.2-fpm.
Socket path di Nginx tidak cocok dengan PHP-FPM → samakan path di www.conf dan fastcgi_pass.
403 — Permission directory/file, atau deny all di config. Cek: ls -la /var/www/..., pastikan www-data bisa read. Directory butuh execute bit (chmod 755).
404 — Path salah, root directive salah, atau file memang tidak ada. Cek root / DocumentRoot dan nama file.
CEK PERMISSION WEB
ls -la /var/www/html
sudo namei -l /var/www/html/index.html
ps aux | grep -E 'nginx|apache' | head -5
# Lihat user yang menjalankan worker
Q
Config test gagal
TEST CONFIG
sudo nginx -t
nginx: [emerg] unexpected "}" in /etc/nginx/sites-enabled/example.com:42
nginx: configuration file /etc/nginx/nginx.conf test failedsudo apache2ctl configtest
Perbaiki baris yang ditunjuk error, lalu test lagi sampai "syntax is ok" / "Syntax OK". Baru kemudian reload.
sudo lsof /var/lib/dpkg/lock-frontend
ps aux | grep -E 'apt|dpkg'
# Jika tidak ada proses apt yang jalan:sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo dpkg --configure -a
sudo apt update
Repository URL sudah tidak valid (release diganti, mirror down, atau sources.list mengarah ke rilis lama yang diarsipkan).
PERBAIKI REPO
cat /etc/apt/sources.list
sudo nano /etc/apt/sources.list
# Pastikan codename sesuai (bookworm, bukan stretch/buster yang sudah EOL tanpa archive)sudo apt update
12
TROUBLESHOOTING
FIREWALL MENGUNCI AKSES
Q
Terkunci karena UFW (SSH port tertutup)
Jika Anda masih punya akses console (panel VPS / IPMI):
BUKA KEMBALI SSH
sudo ufw allow 22/tcp
sudo ufw allow 2222/tcp
# Jika pakai port customsudo ufw status numbered
sudo ufw reload
# Atau nonaktifkan sementara:sudo ufw disable
Jika sama sekali tidak ada console, hubungi support provider untuk recovery console atau reset firewall dari panel.
Q
Rules UFW tidak berjalan sesuai harapan
DEBUG UFW
sudo ufw status verbose
sudo iptables -L -n -v
sudo iptables -L INPUT -n -v --line-numbers
# Urutan rules penting — rule pertama yang match akan dipakai
13
TROUBLESHOOTING
ANALISIS LOG SECARA MENDALAM
Log adalah sumber kebenaran. Belajar membacanya mempercepat troubleshooting berkali lipat.
Sistem umum → journalctl -b -p err, /var/log/syslog
Kernel / hardware → dmesg, journalctl -k
Mail → /var/log/mail.log
14
TROUBLESHOOTING
SERVER LAMBAT / PERFORMA BURUK
Q
Checklist performa cepat
PERF CHECK
uptime# Load average vs jumlah corefree -h
# Memory & swapdf -h
# Disk spaceiostat -xz 1 3
# Disk I/O (install sysstat)ss -s
# Ringkasan koneksi networkps aux --sort=-%cpu | head -10
ps aux --sort=-%mem | head -10
Q
Optimasi dasar yang sering menolong
Pastikan ada cukup RAM; tambah swap hanya sebagai buffer.
Log rotation aktif (logrotate) agar disk tidak penuh diam-diam.
Untuk web: enable gzip/brotli, cache static, HTTP/2, dan PHP OPcache.
Untuk database: sesuaikan innodb_buffer_pool_size (~50–70% RAM untuk dedicated DB server).
Matikan service yang tidak dipakai.
Monitor jangka panjang dengan Netdata / Prometheus + Grafana / Zabbix.
15
TROUBLESHOOTING
CHECKLIST TROUBLESHOOTING CEPAT
Simpan daftar ini. Saat insiden terjadi, kerjakan berurutan.
QUICK CHECKLIST
# === 1. HIDUPKAH SERVER? ===ping -c 3 SERVER_IP
# === 2. PORT TERBUKA? ===nmap -p 22,80,443 SERVER_IP
# === 3. SERVICE JALAN? ===systemctl --failed
systemctl status ssh nginx mariadb
# === 4. RESOURCE CUKUP? ===df -h
free -h
uptime# === 5. ADA ERROR DI LOG? ===journalctl -p err -b --no-pager | tail -30
journalctl -u SERVICE -xe --no-pager | tail -30
# === 6. NETWORK & DNS? ===ip a
ip r
cat /etc/resolv.conf
ping -c 2 8.8.8.8
ping -c 2 google.com
# === 7. FIREWALL? ===sudo ufw status verbose
sudo iptables -L -n | head -20
Setelah masalah selesai: catat root cause, langkah perbaikan, dan pencegahan agar tidak berulang. Dokumentasi singkat ini sangat berharga untuk insiden berikutnya.
Prinsip penutup: Jangan panik. Kumpulkan data dulu, ubah satu hal dalam satu waktu, verifikasi hasilnya, lalu lanjut. Hampir semua masalah server bisa dilacak dengan systemctl, journalctl, df, free, dan log aplikasi.