Cara Load Test Website dengan k6 Sebelum Kampanye
Sebelum promo besar, uji dulu seberapa kuat websitemu. Panduan memasang k6, menulis skrip uji beban, membaca hasilnya, dan batas aman saat menguji.
Jawaban singkat
k6 adalah alat uji beban sumber terbuka dari Grafana yang skripnya ditulis dalam JavaScript. Pasang di komputer terpisah, tulis skenario kenaikan pengguna, pasang ambang lulus seperti p(95) waktu respons dan tingkat error, lalu jalankan ke lingkungan staging beberapa hari sebelum kampanye.
Daftar isi
- Apa yang perlu disiapkan sebelum menguji?
- Langkah melakukan load test dengan k6
- 1. Pasang k6
- 2. Tentukan angka target
- 3. Tulis skrip
- 4. Mulai dengan uji asap
- 5. Jalankan uji utama sambil memantau server
- 6. Baca hasilnya
- 7. Perbaiki lalu ulangi
- Jenis uji apa lagi yang perlu kamu tahu?
- Pertanyaan yang sering diajukan
Kamu sudah menyiapkan promo besar, iklan sudah dijadwalkan, dan influencer siap mengunggah. Tapi apakah websitemu kuat menampung lonjakan pengunjung di jam pertama? Jawaban paling jujur hanya datang dari satu cara: mencobanya sebelum hari H dengan uji beban.
k6 adalah alat uji beban sumber terbuka yang dikembangkan Grafana Labs. Skripnya ditulis dalam JavaScript, dijalankan dari terminal, dan hasilnya langsung berupa angka yang bisa dibaca: berapa cepat halaman merespons, berapa banyak permintaan yang gagal, dan di titik mana server mulai kewalahan.
Apa yang perlu disiapkan sebelum menguji?
Ada tiga hal yang perlu diputuskan sebelum menulis skrip.
Target yang diuji. Sebaiknya lingkungan staging yang spesifikasinya sama dengan produksi. Kalau terpaksa menguji produksi, lakukan di jam paling sepi dan beri tahu tim. Jangan pernah menguji website yang bukan milikmu, karena bagi pemiliknya itu tidak berbeda dengan serangan.
Dari mana uji dijalankan. Jalankan k6 dari komputer atau VPS lain, bukan dari server yang diuji. Kalau k6 berjalan di server yang sama, ia ikut memakan CPU dan hasilnya tidak mencerminkan kondisi nyata.
Perlindungan di depan website. CDN, firewall aplikasi web, atau rate limiting bisa memblokir lalu lintas uji karena terlihat seperti banjir permintaan. Masukkan IP mesin penguji ke daftar pengecualian selama uji, atau sengaja biarkan aktif bila yang ingin kamu ukur justru ketahanan lapisan pelindung itu.
Langkah melakukan load test dengan k6
1. Pasang k6
Di Ubuntu atau Debian, dokumentasi resmi memakai repositori k6:
curl -fsSL https://dl.k6.io/key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/k6-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt-get update
sudo apt-get install k6
Di Fedora atau keluarga RHEL: sudo dnf install https://dl.k6.io/rpm/repo.rpm lalu sudo dnf install k6. Kalau lebih suka Docker, tersedia image grafana/k6.
2. Tentukan angka target
Lihat data analitik kampanye sebelumnya, atau perkirakan dari jumlah orang yang akan menerima pesan promo. Yang penting bukan total pengunjung per hari, tapi berapa yang datang bersamaan di menit tersibuk. Dari situ tentukan jumlah pengguna virtual (VU), yaitu simulasi pengunjung yang terus mengulang skenario.
3. Tulis skrip
Simpan sebagai uji-kampanye.js:
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 50 },
{ duration: '5m', target: 50 },
{ duration: '1m', target: 0 },
],
thresholds: {
http_req_failed: ['rate<0.01'],
http_req_duration: ['p(95)<800'],
},
};
export default function () {
const res = http.get('https://staging.domainmu.com/promo');
check(res, { 'status 200': (r) => r.status === 200 });
sleep(1);
}
Bagian stages menaikkan jumlah VU ke 50 dalam 2 menit, menahannya 5 menit, lalu menurunkannya. Bagian thresholds adalah syarat lulus: permintaan gagal di bawah 1 persen dan 95 persen permintaan selesai di bawah 800 milidetik. Angka-angka ini contoh, sesuaikan dengan target bisnismu. sleep(1) meniru jeda pengunjung asli antara satu klik dan berikutnya.
4. Mulai dengan uji asap
Sebelum beban penuh, ubah target sementara menjadi 1 sampai 2 VU dan durasi pendek. Dokumentasi k6 menyebut ini smoke test: memastikan skrip berjalan dan sistem sehat di beban ringan. Kalau di beban kecil saja sudah ada error, perbaiki dulu.
5. Jalankan uji utama sambil memantau server
k6 run uji-kampanye.js
Selama uji berjalan, buka htop di server, pantau log web server, dan perhatikan grafik di panel atau sistem pemantauan. Kalau belum punya, Node Exporter dan Prometheus membantu melihat CPU, RAM, dan disk dari waktu ke waktu.
6. Baca hasilnya
Di akhir uji, k6 menampilkan ringkasan metrik. Ini yang paling penting:
| Metrik | Artinya | Yang perlu diperhatikan |
|---|---|---|
http_req_duration | Waktu total satu permintaan | Lihat p(95), bukan rata-rata |
http_req_failed | Persentase permintaan gagal | Idealnya mendekati nol |
http_reqs | Jumlah permintaan dan laju per detik | Kapasitas yang tercapai |
checks | Persentase pemeriksaan yang lolos | Status bukan 200 akan terlihat di sini |
vus | Jumlah pengguna virtual aktif | Cocokkan dengan saat waktu respons memburuk |
Bila ambang batas tidak terpenuhi, k6 menandainya dan keluar dengan kode bukan nol. Ini berguna kalau uji dijalankan otomatis di pipeline.
7. Perbaiki lalu ulangi
Hasil yang buruk biasanya mengarah ke salah satu lapisan. CPU penuh di proses PHP berarti worker atau cache perlu ditata, lihat cara mengatur PHP-FPM agar tahan trafik tinggi. Error koneksi saat CPU masih longgar bisa berarti antrean koneksi kernel atau aplikasi penuh, dibahas di setelan sysctl untuk server web bertrafik tinggi. Database yang lambat terlihat dari query yang menumpuk. Ubah satu hal, lalu ulangi uji dengan skrip yang sama supaya hasilnya bisa dibandingkan.
Jenis uji apa lagi yang perlu kamu tahu?
Dokumentasi k6 membagi uji beban ke beberapa jenis. Selain smoke test, ada average-load test untuk trafik normal, stress test untuk beban di atas normal, spike test untuk lonjakan mendadak dan singkat, soak test untuk beban lama berjam-jam, dan breakpoint test untuk mencari batas kapasitas. Untuk kampanye dengan jam tayang tertentu, spike test paling mirip kondisi nyata: pengunjung datang serentak saat promo diumumkan.
Ingat juga bahwa skrip di atas hanya membuka satu halaman. Pengunjung asli membuka beranda, mencari produk, menambah ke keranjang, lalu checkout. Skenario yang mencakup beberapa langkah itu memberi gambaran lebih jujur, terutama untuk halaman yang memanggil database seperti pencarian dan keranjang. Kalau yang ingin kamu ukur adalah kemampuan mentah VPS, bukan aplikasinya, pakai benchmark sederhana untuk VPS.
Pertanyaan yang sering diajukan
Berapa VU yang perlu dipakai?
Mulai dari perkiraan pengunjung bersamaan di menit tersibuk, lalu uji juga sedikit di atasnya sebagai cadangan. Satu VU tidak sama dengan satu pengunjung per detik, karena VU mengulang skenario dengan jeda sleep.
Apakah k6 menjalankan JavaScript di halaman seperti browser?
Tidak secara bawaan. Modul http k6 hanya mengirim permintaan HTTP, tanpa merender halaman. k6 punya modul browser terpisah untuk menguji dari sisi tampilan, tapi lebih berat dijalankan.
Apakah aman load test ke website yang memakai CDN?
Aman selama itu websitemu sendiri, tapi hasilnya bisa menipu karena banyak halaman dilayani dari cache CDN. Uji juga halaman yang tidak di-cache, seperti pencarian dan keranjang, agar server asal ikut teruji.
Kapan sebaiknya uji dilakukan?
Beberapa hari sebelum kampanye, sehingga masih ada waktu memperbaiki dan menguji ulang. Ulangi juga setiap ada perubahan besar pada tema, plugin, atau server.
Apakah hasil uji di staging sama dengan produksi?
Hanya bila spesifikasi, konfigurasi, dan isi databasenya mirip. Staging dengan data sedikit sering terlihat jauh lebih cepat dari kenyataan.
Checklist sebelum hari kampanye:
- Uji dijalankan dari mesin terpisah ke lingkungan yang mirip produksi.
- Ambang lulus waktu respons dan error sudah ditentukan bersama tim.
- Smoke test lulus sebelum uji beban penuh.
- Server dipantau selama uji, dan penyebab leher botol dicatat.
- Uji diulang setelah perbaikan dengan skrip yang sama.
- Halaman yang tidak di-cache ikut diuji.


