Menganalisis hasil load test dan monitoring untuk menemukan bottleneck: correlating metrics, flame graphs, profiling, root cause analysis, dan menyusun rekomendasi perbaikan yang terukur dan actionable.

Setelah di episode 9 kita memahami monitoring stack (Prometheus, Grafana, distributed tracing), kini saatnya mengaplikasikan pemahaman itu dalam bentuk yang paling berharga: menganalisis data untuk menemukan bottleneck. Load test yang menghasilkan data tanpa analisis adalah pemborosan waktu — analisis adalah bagian yang mengubah data menjadi insight yang actionable.
Performance analysis adalah seni dan sains: seni karena membutuhkan intuisi untuk menghubungkan pola dalam data; sains karena berbasis metrik yang terukur. Episode ini membawa kalian dari mengumpulkan data hingga menyusun rekomendasi perbaikan.
Bottleneck selalu memiliki gejala dan akar masalah. Gejala adalah yang kalian lihat di k6 (latency naik, error rate meningkat). Akar masalah adalah yang terjadi di server (CPU tinggi, memory penuh, database lock). Analysis yang baik menghubungkan keduanya.
Waktu 14:30 - 14:35:
- k6: latency p95 naik dari 200ms ke 800ms
- Prometheus: CPU usage naik dari 40% ke 95%
- PostgreSQL: active connections naik dari 20 ke 100
- Application: connection pool size = 50
Kesimpulan: connection pool exhaustion → requests menunggu koneksi → latency naikFlame graph adalah visualisasi yang menunjukkan di mana CPU time dihabiskan oleh aplikasi. Setiap bar adalah function call; lebar bar menunjukkan proporsi CPU time. Flame graph membantu menemukan function yang paling banyak memakan CPU.
# Menggunakan py-spy (Python)
py-spy record -o profile.svg --duration 30 --pid $(pgrep -f "python app.py")
# Menggunakan perf (Linux)
perf record -g -p $(pgrep -f "node app.js") -- sleep 30
perf script | FlameGraph/stackcollapse-perf.pl | FlameGraph/flamegraph.pl > profile.svgCPU profiling merekam aktivitas CPU secara periodik — menghasilkan data tentang function mana yang sedang dieksekusi. Dari profiling data, kalian bisa membuat flame graph atau analisis statistik.
# Node.js: built-in profiler
node --prof app.js
node --prof-process isolate-*.log > processed.txtMemory profiling mengidentifikasi di mana memory dialokasikan dan apakah ada leak:
# Go: pprof
go tool pprof http://localhost:6060/debug/pprof/heap
# Java: jmap + jhat
jmap -dump:live,format=b,file=heapdump.hprof <pid>Database profiling mengungkap query lambat dan execution plans:
-- PostgreSQL: analisis query
EXPLAIN ANALYZE SELECT * FROM products WHERE category_id = 5 ORDER BY created_at DESC;
-- Lihat execution plan untuk menemukan sequential scan yang tidak perluTanyakan "mengapa" secara berulang sampai menemukan akar masalah:
Diagram Ishikawa membantu mengorganisasi kemungkinan akar masalah dalam kategori:
Rekomendasi harus specific, measurable, dan actionable:
| Temuan | Rekomendasi | Expected Impact | Priority |
|---|---|---|---|
| Connection pool 50, VUs 200 | Naikkan pool ke 200 | Kurangi waiting time 60% | High |
Query N+1 di /products | Eager fetch categories | Kurangi query 100x | High |
| No caching untuk product list | Tambah Redis cache | Kurangi latency 50% | Medium |
| Large response payload | Implement pagination | Kurangi bandwidth 80% | Medium |
Saat mempresentasikan hasil analysis ke stakeholder non-technical:
Di episode 10 ini kalian telah memahami analysis & bottleneck detection:
Di episode 11 selanjutnya, kita akan membahas Capacity Planning — bagaimana menggunakan data performance test untuk merencanakan infrastruktur, forecasting, dan budgeting yang tepat. Siapkan spreadsheet kalian!