Cara Mengatasi CPU Usage 100% di VPS Linux: Lacak Proses Htop, Hentikan Zombie Process, dan Batasi CPULimit
Setiap administrator server atau pemilik website yang mengelola Virtual Private Server (VPS) mandiri pasti pernah mengalami momen menegangkan ini: tiba-tiba panel monitoring server Anda mengirimkan notifikasi peringatan merah, situs web yang dihosting di server mulai memuat halaman dengan sangat lambat (time out), dan sesi terminal SSH Anda terasa sangat berat bahkan untuk sekadar mengetikkan satu baris perintah.
Ketika Anda menjalankan perintah pengecekan beban sistem, grafik pemakaian prosesor menunjukkan angka kritis: CPU Usage 100% bertahan selama berjam-jam tanpa pernah turun.
Beban pemakaian prosesor yang menyentuh batas maksimal secara terus-menerus tidak hanya membuat seluruh aplikasi web Anda lumpuh, namun juga berisiko memicu penghentian paksa (kill out-of-memory) oleh kernel Linux terhadap layanan-layanan penting seperti server database MariaDB atau layanan web server Nginx.
Panduan langkah demi langkah ini akan memandu Anda melacak secara cepat proses jahat atau skrip macet yang menjadi dalang pemborosan siklus komputasi, menghentikannya secara aman, dan memasang dinding pembatas resource agar server Anda tetap stabil melayani pengunjung.

Langkah 1: Pantau dan Urutkan Konsumsi Prosesor Menggunakan Htop
Alat pemantau bawaan top memang tersedia di semua distro Linux, namun tampilan antarmuka interaktif dari aplikasi htop memberikan visualisasi yang jauh lebih jelas dan mudah dianalisis secara langsung:
- Buka terminal Anda dan masuk ke server VPS melalui koneksi SSH.
- Pasang aplikasi
htopjika belum tersedia di server Anda: - Untuk distro Ubuntu atau Debian:
apt update && apt install -y htop - Untuk distro AlmaLinux atau Rocky Linux:
dnf install -y htop - Jalankan aplikasi dengan mengetikkan perintah:
htop - Layar terminal akan menampilkan grafik bar warna-warni untuk setiap inti prosesor (core) serta daftar proses yang sedang berjalan di sistem.
- Untuk mengurutkan daftar proses berdasarkan konsumsi prosesor tertinggi, tekan tombol P pada keyboard Anda (atau tekan tombol F6, lalu pilih opsi kolom PERCENT_CPU).
- Perhatikan baris teratas pada kolom PID (identitas proses) dan COMMAND (perintah yang sedang dieksekusi).
Apakah proses teratas tersebut adalah layanan web yang sah (seperti php-fpm atau mysqld), ataukah proses aneh dengan nama acak yang berjalan dari direktori temporer /tmp? Mengidentifikasi nama proses di baris puncak adalah kunci utama menentukan tindakan perbaikan berikutnya.

Langkah 2: Cara Hentikan Proses Macet atau Bandel Secara Aman
Jika Anda menemukan ada satu proses skrip PHP macet yang terus menerus menyedot seratus persen daya satu inti prosesor, jangan langsung menggunakan perintah pemutus paksa yang agresif karena dapat merusak integritas data yang sedang ditulis:
- Cobalah menghentikan proses tersebut secara sopan (Graceful Termination) menggunakan sinyal SIGTERM:
kill -15 <NOMOR_PID>
Ganti <NOMOR_PID> dengan angka yang tertera pada kolom PID di tampilan htop Anda (misalnya kill -15 4821). Sinyal ini memberi kesempatan bagi proses untuk menutup koneksi database dan membersihkan memori secara aman sebelum berhenti.
- Tunggu sekitar lima hingga sepuluh detik. Jika proses tersebut masih tetap berjalan dan menolak berhenti, kirimkan sinyal pemutusan paksa (Force Kill) menggunakan sinyal SIGKILL:
kill -9 <NOMOR_PID>
Sinyal angka 9 akan langsung memerintahkan kernel Linux untuk mencabut alokasi prosesor dari proses tersebut secara seketika.
Langkah 3: Bersihkan Proses Zombie (Defunct Processes)
Kadang kala, proses utama telah selesai bekerja namun proses anak (child process) tetap menggantung di dalam tabel proses kernel dalam status mati suri. Proses ini dikenal sebagai zombie process atau proses bertanda [Z] / defunct di htop.
Meskipun satu proses zombie tidak menyedot siklus komputasi secara langsung, ratusan proses zombie yang menumpuk akan mengunci antrian penjadwalan CPU (CPU run queue) dan menghalangi proses normal lainnya.
Untuk melacak dan membersihkan rantai proses zombie:
- Jalankan perintah terminal berikut untuk menemukan proses zombie beserta nomor induknya (PPID):
ps -eo pid,ppid,stat,cmd | grep -w "Z"
- Anda tidak bisa mematikan proses zombie secara langsung karena proses tersebut pada dasarnya sudah mati. Cara membersihkannya adalah dengan menghentikan proses induk (Parent PID) yang gagal melepas proses anak tersebut:
kill -9 <NOMOR_PPID_INDUK>
Setelah proses induk dihentikan, kernel sistem operasi akan mengambil alih dan secara otomatis menyapu bersih seluruh proses zombie yang terbengkalai.
Berikut tabel rangkuman strategi penanganan cepat berdasarkan jenis beban prosesor yang terdeteksi di server:
| Pola Lonjakan CPU di Server | Sumber Penyebab Paling Sering | Solusi Penanganan Efektif |
|---|---|---|
| Lonjakan pada pool php-fpm | Skrip PHP looping atau plugin web berat | Restart pool php-fpm dan batasi max_children |
| Lonjakan konstan pada mysqld | Kueri database tanpa indeks (slow query) | Analisis kueri lambat via slow query log |
| Nama proses acak di folder /tmp | Infeksi skrip malware mining kripto | Hentikan proses, hapus file skrip, dan amankan SSH |
| Banyak status ‘D’ (uninterruptible) | Disk I/O macet menunggu storage cloud | Periksa kesehatan disk dan kecepatan baca IOPS |
| Banyak proses defunct / status Z | Kegagalan fungsi fork pada aplikasi custom | Hentikan PPID induk untuk membersihkan tabel antrean |

Langkah 4: Batasi Konsumsi Prosesor Berlebih Menggunakan CPULimit
Jika Anda memiliki tugas otomatisasi latar belakang (seperti skrip kompresi cadangan data harian atau konversi berkas gambar video) yang secara periodik membuat CPU server melonjak seratus persen hingga mengganggu pengunjung website, Anda dapat membatasi jatah penggunaan prosesor aplikasi tersebut menggunakan alat cpulimit:
- Pasang paket
cpulimitpada server Anda: - Untuk Ubuntu/Debian:
apt install -y cpulimit - Untuk RHEL/AlmaLinux:
dnf install -y cpulimit - Jalankan proses berat Anda di bawah batas persentase prosesor tertentu, misalnya membatasi penggunaan maksimal sebesar lima puluh persen dari kapasitas satu inti prosesor:
cpulimit -l 50 -- /usr/bin/php /var/www/script_backup.php &
Atau batasi proses yang sudah berjalan menggunakan nomor PID yang sedang aktif:
cpulimit -p <NOMOR_PID> -l 40 &
Dengan membatasi jatah siklus prosesor secara ketat, tugas latar belakang yang berat tetap dapat berjalan hingga tuntas tanpa pernah menghabiskan seluruh sumber daya komputasi server utama Anda.
Memelihara stabilitas beban prosesor VPS Linux adalah keterampilan penting bagi setiap administrator sistem. Melalui pemantauan visual htop yang teratur, pembersihan proses macet yang tepat, dan pembatasan beban tugas berkala, server Anda akan selalu responsif melayani lalu lintas aplikasi bisnis secara prima.