程式效能四大觀測維度
| 維度 | 關注點 |
| 執行速度 | 回應時間是否足夠短、吞吐率是否達標 |
| 記憶體分配 | 堆外/堆內記憶體使用合理性、是否洩漏 |
| 啟動時間 | 從啟動到可服務的時間成本 |
| 負載承受力 | 壓力升高時效能退化曲線是否平緩 |
效能度量關鍵指標
- 執行時間:壁鐘時間
- CPU 時間:執行緒佔用 CPU 累計時間
- 記憶體佔用:Heap/Non-Heap、直接記憶體、Metaspace
- 磁碟 I/O 吞吐:讀寫速率、IOPS、延遲
- 網路吞吐:頻寬使用、連線數、重傳率
- 回應時間:百分位數(P50/P95/P99)比平均值更有意義
七大常見效能瓶頸來源
- 磁碟 I/O:機械硬碟隨機讀寫極慢,SSD 亦有壽命與延遲考量
- 網路操作:不可控延遲、序列化開銷、協定交互往返
- CPU 密集計算:長時間佔用核心、上下文切換、快取失效
- 異常處理:堆疊追蹤建構極其昂貴,避免用於流程控制
- 資料庫存取:SQL 效率、連線池、鎖競爭、網路往返
- 鎖競爭:高併發下 Context Switch 暴增、活鎖/死鎖風險
- 記憶體壓力:GC 頻率/停頓、大物件分配、堆外洩漏
效能調優五大層次(由高到低影響力)
- 架構設計調優:系統分層、服務拆分、資料流向、快取策略——質的飛躍
- 程式碼調優:演算法複雜度、資料結構選擇、API 正確使用、避免反模式
- JVM 調優:GC 演算法選擇、堆大小、編譯器參數、啟動參數調校
- 資料庫調優:SQL 改寫、索引設計、分庫分表、參數調優
- 作業系統調優:檔案控制代限制、TCP 參數、Swap、NUMA 親和性
基礎調優策略與鐵律
- 明確目標:先定位瓶頸(Profiling/APM/日誌),再針對性優化
- 數據驅動:嚴格基準測試,對照組/實驗組,統計顯著性驗證
- 單一變數:每次只調整一個參數/程式碼點
- 成本收益:優化投入產出比,避免過早優化
效能優化有風險,調優必須有明確目的,不要為了調優而調優!盲目調優,風險遠大於收益!
工具鏈推薦
- Profiling:JProfiler、YourKit、async-profiler、Java Flight Recorder (JFR)
- GC 分析:GCViewer、GCEasy、jstat、jmap/jhat
- 基準測試:JMH (Java Microbenchmark Harness)
- APM:SkyWalking、Pinpoint、Prometheus + Grafana