Merencanakan kapasitas dan mengoptimalkan performa: memahami metrik performa, melakukan benchmarking yang benar, menerapkan tuning sistematis, serta menyusun capacity plan berbasis data pertumbuhan

Setelah di episode 21 kita membuat sistem tahan gagal, kini kita memastikan sistem tidak lemah batuk saat dibebani: performance & capacity. Infrastruktur yang aman tapi lambat tetap gagal memenuhi harapan — dan infrastruktur tanpa kapasitas yang direncanakan adalah bom waktu yang meledak tepat saat traffic naik.
Mengapa topik ini penting? Karena performa dan kapasitas bukan tebakan — keduanya bisa diukur, dibandingkan, dan direncanakan. Episode ini membekali kalian metrik yang benar, benchmarking yang tidak menipu, proses tuning yang sistematis, dan capacity plan yang berbasis data.
Metrik server memberi tahu kondisi komponen; metrik pengalaman memberi tahu yang dirasakan user. Keduanya dibutuhkan:
| Tipe | Contoh | Pertanyaan |
|---|---|---|
| Komponen | CPU, memory, disk I/O | Apakah resource habis? |
| Pengalaman | Latency, throughput, error rate | Apakah user puas? |
| Saturasi | Queue length, connection pool | Apakah antrean menumpuk? |
Pilar metrik performa (dari USE dan RED method):
Utilization : seberapa penuh resource? (target < 70-80%)
Saturation : berapa banyak yang mengantre? (target: mendekati nol)
Errors : berapa banyak yang gagal? (target: nol)Rate : request per detik
Errors : error per detik
Duration : latency (p50, p95, p99)Rata-rata latency yang "enak" bisa menyembunyikan bencana: 99% request cepat, 1% sangat lambat. Percentile jauh lebih jujur:
p50 = 80 ms → setengah user di bawah 80ms
p95 = 200 ms → 5% user lebih lambat dari 200ms
p99 = 900 ms → 1% user menunggu hampir 1 detik!Jika kalian hanya melihat rata-rata, outlier p99 yang menyakitkan tidak terlihat. Selalu pantau p95/p99.
Benchmark berguna — jika dilakukan dengan benar. Kesalahan umum membuat hasil tak berarti:
sysbench cpu run
sysbench memory run
fio --name=test --ioengine=libaio --rw=randwrite --size=1G
iperf3 -c 10.0.1.10Dan untuk HTTP/API:
docker run --rm -i grafana/k6 run - <<'EOF'
import http from 'k6/http'
export const options = {
stages: [
{ duration: '1m', target: 50 },
{ duration: '2m', target: 200 },
{ duration: '1m', target: 0 },
],
}
export default function () {
http.get('http://api.lab.local/healthz')
}
EOFPerhatikan pola ramp-up bertahap (50 → 200 → turun): beban nyata tidak meledak seketika, dan ramp-up menemukan titik patah dengan lebih aman.
Tip
Aturan emas benchmarking: ubah satu variabel pada satu waktu. Benchmarking sambil mengubah tiga hal sekaligus menghasilkan data yang tidak bisa dianalisis. Dan selalu rekam kondisi lingkungan (versi kernel, beban mesin lain, jam berapa) — karena hasil yang sama di lingkungan berbeda tidak bisa dibandingkan.
Tuning bukan "coba-coba parameter". Proses yang benar:
1. Ukur baseline
2. Identifikasi bottleneck (lapisan mana yang pertama penuh)
3. Hipotesis perbaikan
4. Ubah satu variabel
5. Ukur ulang
6. Bandingkan → simpan jika membaik, rollback jika tidak
7. DokumentasikanBottleneck umum: worker terlalu sedikit → request mengantre; atau buffer terlalu kecil → respons patah.
worker_processes auto;
worker_connections 1024;
keepalive_timeout 30;
client_max_body_size 20m;Uji: naikkan worker_connections, bandingkan p99, rollback jika tidak membantu.
Parameter kernel memengaruhi seluruh host:
net.core.somaxconn # antrean koneksi (naikkan untuk banyak koneksi)
net.ipv4.tcp_fin_timeout # waktu socket menunggu (kecilkan untuk short connections)
vm.swappiness # kecenderungan swap (kecilkan untuk server DB)
fs.file-max # batas file descriptorsudo sysctl -w vm.swappiness=10
sudo sysctl -p /etc/sysctl.confSelalu ukur sebelum/sesudah dan simpan perubahan di file (/etc/sysctl.conf) — bukan sysctl -w sementara yang hilang saat reboot.
Capacity planning menjawab: berapa kapasitas yang dibutuhkan bulan depan, tahun depan — dan kapan harus menambah.
Kebutuhan = (beban saat ini × proyeksi pertumbuhan) + buffer
Sisa waktu = kapasitas tersedia ÷ tingkat konsumsi per bulanContoh: disk terpakai 600 GB dari 1 TB, tumbuh 40 GB/bulan → habis dalam 10 bulan → tambah/tiering sebelum bulan ke-7 (dengan buffer 20-30%).
1. Ringkasan eksekutif (apa yang akan habis dan kapan)
2. Data historis & proyeksi per sumber daya
- Compute : CPU, memory per host/pool
- Storage : kapasitas, IOPS
- Network : bandwidth puncak
- Lain : IP, connection, license
3. Titik kritis (kapan tiap sumber daya habis)
4. Rencana aksi (tambahan kapasitas, optimasi, tiering)
5. Review berkala (jadwal, misal kuartalan)Capacity plan bukan dokumen mati — ia di-review berkala dan diperbarui dari data nyata.
Pada episode 22 ini kalian telah menguasai performa & kapasitas:
Di episode 23 selanjutnya kita masuk topik paling panas 2026: AI infrastructure — GPU clusters, workload AI, dan inference infra. Sampai jumpa di episode 23!