Java/.NET Performance Monitoring, Analysis, Diagnostics & Profiling - Application Performance Management

Alois Reitbauer氏がWeek 3 - Myths and Truths about Performance Measurement Overhead Performance, Scalability and Architecture - Java and .NET Application Performance Management (dynaTrace Blog)においてパフォーマンス計測におけるオーバーヘッドについてよくある誤解と事実についてまとめている。紹介されている内容を簡単に要約すると次のとおり。

1. 事実 - パフォーマンス計測はオーバーヘッドを生む

パフォーマンス計測を実施することは、その分だけオーバーヘッドを発生させる。

2. 事実 - パフォーマンス計測のオーバーヘッドはアプリケーションの動作に影響を及ぼす

これはときに「ハイゼンバグ」と呼ばれることもあるが、パフォーマンス計測を実施することでアプリケーションの動作そのものにも影響を与える。この点において注意しておく必要がある。

3. 誤解 - パフォーマンス計測のオーバーヘッドは簡単なパーセンテージで表現できる

パフォーマンス計測のオーバーヘッドは単純にシステム稼働の何パーセント、といったようには表現できない。レスポンスタイム、CPU利用率、メモリ消費量などいくつもの要因があり、正確なオーバーヘッドを知るにはさまざまなシステム特性をモニタリングして調査しておく必要がある。

4. 誤解 - パフォーマンス計測のオーバーヘッドはアプリケーションに依存するものではない

パフォーマンス計測のオーバーヘッドはアプリケーションに依存している。なお計測には定間隔で計測を実施するサンプリングベースの方法と、メソッドコールに合わせるといったイベントベースのものがある。サンプリングベースは負荷が予測しやすいが正確に計測できないパターンがあり、イベントベースの場合は計測自身は正確さが見込めるがアプリケーションに手を入れるかコストの高い仮想マシンベースにAPIを利用する必要がある。

Week 3 – Myths and Truths about Performance Measurement Overheadより抜粋

Week 3 – Myths and Truths about Performance Measurement Overheadより抜粋

5. 誤解 - より詳細なパフォーマンス計測はより高いオーバーヘッドをもたらす

Week 3 – Myths and Truths about Performance Measurement Overheadより抜粋

ある点では事実だが、それが必ずしも一般的な事実ではない。パフォーマンス計測は低レベルから高レベルまでさまざまな敷居があり、それぞれのレベルで取得できるデータも利用するリソースも変わってくる。この段階におけるオーバーヘッドが依存するのはアーキテクチャであり、より詳しい計測に依存するものではない。

同ブログはパフォーマンスアナライザであるdynaTraceに関連した話題を扱っており、今回の内容は最終的にdynaTraceで提供しているようなプロダクトを活用することでオーバーヘッドチューニングが可能だと結んでいるものだが、それまでに紹介されている項目はパフォーマンス計測におけるオーバーヘッドに関する一般的な知識として役に立つ。