• Indonesian
  • English
  • Optimasi CPU VPS Workload Heavy: 7 Langkah Cepat 2026

    Kecepatan:
    ⏱ 8 min read

    Skip basa-basi. Kalau kamu sampai baca artikel ini, besar kemungkinan CPU VPS kamu lagi mentok di 100%, atau workload kamu makin gede dan kamu ragu VPS-nya kuat. Response time nembak, user komplain, kamu jadi jarang tidur nyenyak. Oke, kabar baiknya: ini jarang banget soal VPS-nya jelek. Ini soal cara kita ngatur workload-nya. Tujuh langkah di bawah ini udah aku praktekin di belasan server production, dan hasilnya kelihatan nyata. Ikutin urutannya, jangan lompat-lompat.

    Biar gampang, bayangin CPU itu dapur restoran. Semua order masuk barengan, chef gak sempat nyiapin bahan, terus gak ada yang ngurus prioritas menu — dapur yang cuma satu itu pasti jebol. Nah, langkah-langkah di bawah ini intinya ngatur dapur tadi dengan bener. Bukan buru-buru beli dapur baru, karena masalahnya sering bukan di luas dapurnya.

    Difficulty: Intermediate
    Last Updated: Agustus 2026
    Tested On: Ubuntu 22.04 LTS, AlmaLinux 9, KVM VPS (2-8 vCPU)

    Masalah: CPU Saturated Itu Nggak Cuma Soal Angka 100%

    Masalah CPU saturated sebenernya bukan cuma angka 100% di dashboard. Yang kena duluan selalu latency — request makin lama, koneksi numpuk di queue, dan user ngerasa halaman loading-nya “megap-megap”. Terus muncul timeout, gateway error, dan kalau workload kamu jenis batch, job-job mulai ke-skip atau malah jalan dobel. Yang paling bahaya: cascade failure. Server yang lambat bikin service lain ikut numpuk koneksi, database kena connection limit, dan akhirnya satu stack down barengan. Nah, dari sini kita mulai, dari langkah pertama yang paling sering dilewatin orang.

    Satu hal yang perlu kamu tanam dari sekarang: optimasi yang bagus selalu dimulai dari data, bukan perasaan. Semakin jelas kamu tahu beban apa yang bikin CPU kerja keras, semakin tepat solusinya. Jadi jangan skip langkah profiling ini walau keliatannya lama.

    Langkah 1 — Profiling Dulu, Jangan Nebak-Nebak

    hasil mpstat profiling CPU VPS workload heavy

    Kebiasaan buruk yang paling sering aku temuin di lapangan: langsung ganti config ini-itu tanpa tahu beban aslinya kayak apa. Nggak jarang malah makin parah. Jadi pertama-tama kita bikin baseline dulu. Buka terminal ke server kamu, terus jalanin tiga perintah ini:

    uptime
    mpstat -P ALL 1 5
    vmstat 1 10

    Kalau mpstat belum ada, install dulu paket sysstat. Di Ubuntu: apt install sysstat, di AlmaLinux: dnf install sysstat. Hasilnya kira-kira kayak gini:

    Linux 5.15.0-122-generic (server-01) 08/03/2026 _x86_64_ (4 CPU)
    
    08:00:01  CPU    %usr   %nice    %sys  %iowait   %steal  %irq   %soft  %guest  %gnice  %idle
    08:00:02  all    61.00    0.00   12.50    18.50    8.00    0.00    0.50    0.00    0.00    0.00
    08:00:03  all    58.50    0.00   11.25    20.00    7.75    0.00    0.50    0.00    0.00    0.00
    08:00:04  all    63.25    0.00   12.00    17.25    9.25    0.00    0.25    0.00    0.00    0.00

    Nah, yang perlu kamu baca dari output di atas: (1) %usr tinggi berarti CPU memang lagi dipake aplikasi, (2) %iowait tinggi artinya CPU banyak nungguin disk, (3) %steal tinggi artinya CPU kamu lagi “dicolong” sama tenant lain di host yang sama, dan (4) %idle yang jeblok. Kombinasi kolom-kolom ini udah ngasih clue besar ke mana solusinya. Jangan cuma liat total load average-nya doang.

    Soal load average, inget aturan mainnya: load average normal itu sekitar jumlah vCPU, bukan lebih. Kalau VPS kamu 4 vCPU dan load average di uptime nunjukin 8.5 selama beberapa menit, artinya ada antrean panjang yang nunggu giliran CPU. Ibaratnya dapur tadi — antrean order numpuk.

    Langkah 2 — Cek CPU Steal dan Alokasi vCPU Kamu

    Ini bagian yang paling sering bikin orang salah move. CPU tinggi tapi nggak ada proses yang kelihatan bejat? Cek dulu steal-nya. Kalau %steal konsisten di atas 10-15 persen, itu bukan beban kamu — itu host yang oversubscribed. CPU fisiknya lagi dibagi-bagi ke lebih banyak tenant daripada kapasitasnya.

    Cek persist-nya dulu biar yakin:

    mpstat -P ALL 5 10 | grep -i avg

    Kalau hasilnya steal di atas 10 persen terus, opsi kamu: minta provider pindahin ke host lain (biasanya gratis buat kasus begini, tinggal jelasin data steal-nya), atau migrasi ke instance yang dedicated core. Kadang masalah yang kamu kira “server lemot” ternyata cuma ini doang. Kalau butuh cara migrasinya, aku udah nulis panduan lengkapnya di artikel migrasi VPS KVM zero-downtime.

    Langkah 3 — Atur Prioritas Proses dengan Jelas

    Workload heavy itu hampir selalu campuran: ada yang penting dan ada yang bisa nunggu. Masalahnya, kalau semuanya jalan bareng dengan prioritas sama, yang gak penting ikut makan jatah CPU. Di sinilah nice, ionice, dan cgroup dipakai.

    Buat job batch kayak backup atau proses laporan, turunin prioritasnya biar gak ngerebut CPU dari service utama:

    nice -n 19 ionice -c 3 /usr/local/bin/backup-job.sh

    Buat service yang harus dibatesin, pakai systemd quota. Misalnya kamu pengen service monitoring maksimal 80 persen dari satu core:

    systemctl set-property netdata.service CPUQuota=80%
    systemctl daemon-reload

    Catatan kecil: CPUQuota=80% itu artinya 80 persen dari satu vCPU, bukan 80 persen dari seluruh CPU. Kalau kamu mau 4 core penuh, tulis CPUQuota=400%. Gampang kok.

    Langkah 4 — Tune Stack Web, Jangan Sampai Overcommit

    Sekarang masuk ke yang paling sering jadi biang kerok: stack web yang overcommit. Nginx dan PHP-FPM kalau disetting asal, bisa makan semua CPU dan RAM tanpa ampun. Mulai dari Nginx:

    worker_processes auto;
    worker_connections 1024;
    keepalive_timeout 65;

    worker_processes auto itu bikin Nginx nyesuaiin jumlah worker sama jumlah core. Worker connection jangan digede-gedein seenaknya — kalau kebanyakan, malah numpuk koneksi idle yang makan resource.

    Terus PHP-FPM. Ini yang paling sering salah. Formula yang aku pake: perkirakan dulu rata-rata memori per worker (biasanya 80-150 MB buat WordPress/Laravel), terus bagi total RAM yang mau dialokasikan. Contoh pool config:

    pm = dynamic
    pm.max_children = 25
    pm.start_servers = 5
    pm.min_spare_servers = 5
    pm.max_spare_servers = 10

    Kalau tiap worker makan 120 MB dan kamu punya RAM 4 GB dengan sisa buat PHP 3 GB, max_children yang aman itu sekitar 25. Jangan pasang 80, nanti malah kena swap dan malah makin lambat.

    RAM Total Estimasi max_children (asumsi 100 MB/child) Contoh WordPress
    1 GB 5-7 Hanya 1-2 site kecil
    2 GB 10-15 3-5 site ringan
    4 GB 20-30 Sampai 10 site medium
    8 GB 50-70 Traffic lumayan rame

    Angka di atas asumsi 100 MB per worker. App kamu bisa beda — cek pake ps aux --sort=-%mem buat dapet angka yang akurat. Yang penting: jangan overcommit, kasih napas buat OS dan database.

    Langkah 5 — Optimasi Database dan Query

    Kalau workload kamu jalan di atas MySQL atau MariaDB, database bisa jadi pemakan CPU terbesar. Penyebab utamanya: query yang gak pakai index sehingga full scan, dan cache yang gak dimaksimalin.

    Aktifin slow query log dulu biar kelihatan query mana yang bejat:

    SET GLOBAL slow_query_log = 'ON';
    SET GLOBAL long_query_time = 1;

    Terus cek hasilnya di slow.log, analisis pake EXPLAIN, tambahin index di kolom yang sering dipakai di WHERE dan JOIN. Contoh:

    EXPLAIN SELECT * FROM orders WHERE customer_id = 42 AND status = 'paid';

    Kalau di output EXPLAIN kolom type-nya “ALL”, artinya full table scan. Tambahin index:

    CREATE INDEX idx_orders_customer_status ON orders (customer_id, status);

    Aku udah nulis lebih detail soal ini di artikel optimasi MySQL InnoDB di VPS kalau kamu mau dalem lagi.

    Langkah 6 — Pindahin Pekerjaan ke Layer Cache

    Trik yang paling efektif buat workload heavy: jangan biarin CPU kerja dua kali buat hal yang sama. Bikin cache di layer paling deket sama user dulu, baru pikir yang lain.

    Yang wajib: OpCache buat PHP (biasanya udah kebuka), object cache Redis buat WordPress/Laravel, dan cache query database. Tambahin page cache di Nginx atau Varnish kalau kontennya banyak yang statis. Hasilnya CPU langsung lega karena gak ngulang-ngulang render.

    Terus, pekerjaan background kayak kirim email, generate thumbnail, atau sync API — pindahin ke queue worker yang jalan secara terpisah dan dibatesin prioritasnya. Jangan campur jadi satu sama request user. Di Laravel ini gampang, tinggal set queue di database atau Redis.

    Langkah 7 — Pasang Monitoring Sebelum Kamu Cepat Tidur

    Langkah terakhir yang gak boleh dilewatin: monitoring. Tuning tanpa monitoring itu kayak masak tanpa nyicipin — kamu gak bakal tau rasanya. Pasang netdata atau Prometheus + node_exporter, set alert kalau load average atau %steal lewat batas.

    Alert yang kepakai sehari-hari di tim aku: load average di atas jumlah vCPU selama 10 menit, iowait di atas 20 persen selama 5 menit, dan swap usage yang naik terus. Dari situ, kamu bisa nangkep masalah sebelum user ngeluh. Kalau belum punya workflow monitoring, cek dulu artikel cara baca log server Linux buat bekal awal.

    Tabel Troubleshooting Cepat

    Gejala Penyebab Umum Cek dengan Solusi Cepat
    Load average di atas jumlah vCPU terus Aplikasi kehabisan worker / query bejat mpstat, ps aux, slow query log Tuning worker pool + cache + index
    %steal konsisten tinggi Host oversubscribed mpstat Migrasi instance / keluh ke provider
    %iowait tinggi Disk lambat / kebanyakan I/O iotop, vmstat SSD + kurangi read/write berlebihan
    PHP-FPM spawn terus-terusan max_children salah set pm.status Hitung ulang sesuai RAM
    CPU user rendah tapi load tinggi Proses I/O-bound nunggu disk vmstat, pidstat Prioritaskan proses, cek disk health

    Buat case di server yang pake panel kayak cPanel, pola troubleshoot-nya hampir sama cuma tooling-nya beda — aku bahas lengkap di artikel troubleshoot high load di server cPanel.

    FAQ

    Q: Apakah solusinya selalu naikin vCPU?

    Nggak. Naikin vCPU itu opsi terakhir, bukan pertama. Kebanyakan kasus yang aku temuin beres dengan profiling + tuning worker pool + cache. Naikin vCPU tanpa tahu root cause itu kayak gedein dapur tapi masaknya tetap amburadul — makin boros aja.

    Q: Load average berapa yang bisa dibilang normal?

    Aturan kasarnya: normal sekitar jumlah vCPU kamu. 4 vCPU berarti load average 4 masih oke, 8 udah nunggu antrean panjang. Tapi inget, load average juga bisa tinggi karena nunggu disk (iowait), bukan cuma karena CPU — makanya cek pake mpstat dulu.

    Q: CPU steal itu apa sih?

    CPU steal itu waktu CPU virtual kamu nyari akses ke CPU fisik tapi kalah antre sama tenant lain di host yang sama. Kalau udah oversubscribed, workload kamu tetep “cepat” secara logika tapi nyatanya lambat. Steal di atas 10% itu tanda host-nya rame.

    Q: Tuning di atas aman buat server production yang lagi jalan?

    Aman kalau kamu lakuin perlahan, satu perubahan per satu, dan pantau pake monitoring sebelum lanjut. Kalau ngerasa gak yakin dengan suatu perubahan, rollback. Jangan lupa backup config sebelum ngubah apa-apa.

    Author: Syslog Solutions — NOC & Server Management Team. We handle 500+ servers daily, from shared hosting to enterprise dedicated infrastructure.

    Oke, itu dia 7 langkahnya. Sebelum close, pastiin kamu udah jalanin checklist ini: 1) profiling dulu pake mpstat, 2) cek %steal, 3) set prioritas proses, 4) hitung ulang worker pool PHP-FPM, 5) optimasi query yang bejat, 6) pasang cache di layer yang bener, 7) monitoring jalan. Kalau semua kelar, done. Simpel kan? Gitu doang sih.