Dec 20, 2011

[Java Performance]Chapter 2:Operating System Performance Monitoring

這篇談到如何在作業系統層級搜集數據(CPU、Memory、Network I/O、Disk I/O),從數據中分析可能的效能問題

名詞定義:

  • Performance monitoring: 使用非侵入式的方法從作業系統或應用程式搜集、觀察數據,如使用作業系統提供的工具(e.g. vmstat)搜集效能數據,但不會影響應用程式的行為與效能,這方法適用於大部份的環境(production / development/ testing ...)使用
  • Performance profiling: 使用侵入式方法搜集較特定目標數據,如某method的total cpu time/輸入參數,但可能會調整到應用程式行為或者降低效能,這方法比較適用於development/ testing 環境
  • Performance tuning: 通常是 monitoring與profiling之後,發覺問題進而修改程式碼 / 設定參數,增進應用程式效能

Dec 15, 2011

[Java Performance]Chapter 1:Strategies, Approaches, and Methodologies

在軟體開發流程中該在何時評估效能?
傳統上瀑布式開發(Analysis > Design > Code > Test)會在測試階段進行效能測式,當效能結果不符合要求,調整代價可能很高,因此在擬定需求時就需要將效能指標定義出來,由需求驅動開發過程中各階段的效能測試
  • 期望的throughput為多少?
  • 期望latency為多少?
  • 要能負載多少的 concurrent users 或者 concurrent tasks?
  • 在最大數量的 concurrent users 或者 concurrent tasks負載下,可接受的latency 或者throughput為多少?
  • 最糟糕狀況下可接受的latency為多少?
  • garbage collection 引入的延遲否容許?
假設某些use case可能造成高度的效能風險,那應該在Analysis階段之前製作prototype驗證效能的可行性

Dec 6, 2011

Java時間解析度

Inside the Hotspot VM: Clocks, Timers and Scheduling Events - Part I - Windows 說明作業系統在讀取時間與時間event(schedule/trigger)的限制,因此從java api取得的 nanosecond 的數值並不精確,越高的解析度(nanoseconds > microseconds > milliseconds)精確度越低,文中也提供了些使用上的建議。
  • 需要讀取精確的時間使用 System.currentTimeMillis()
  • 需要比較時間差異使用 System.nanoTime()
  • 需要等待系統回應(e.g. wait/sleep),設定時間別小於10 milliseconds