8

単一の単体テストを実行し、その「プロファイリング」情報を収集したいと考えています。すべてのメソッドが呼び出される頻度、特定のクラスのインスタンスがいくつ作成されたか、特定のメソッド/スレッドの実行にかかった時間などです。次に、私はこの情報をいくつかの期待値と比較したい。これを実行できる Java 用のプロファイラーはありますか (もちろん、GUI やユーザーの操作なしで、すべて自動的に実行する必要があります)。

これは私がそれをどのように機能させたいかです:

public class MyTest {
  @Test
  public void justTwoCallsToFoo() {
    Profiler.start(Foo.class);
    Foo foo = new Foo();
    foo.someMethodToProfile(); // profiler should collect data here
    assertThat(
      Profiler.getTotalCallsMadeTo(Foo.class, "barMethod"), 
      equalTo(3)
    );
  }
}
4

2 に答える 2

3

プロファイリング情報のスナップショットを自動的にキャプチャすることは、いくつかの Java プロファイラーで可能です。VM パラメーターを Java 開始コマンドに追加してプロファイラーをロードする必要があり、データを記録して終了時にスナップショットを保存するようにプロファイラーに指示する必要があります。

JProfilerでは、「プロファイル」ant タスクを使用してこれを行うことができます。JProfiler GUI からエクスポートされた構成ファイルからプロファイリング設定を取得します。Controller APIを使用して、記録を開始し、スナップショットを保存できます。

次に、2 つの選択肢があります。

  1. jpcompareコマンド ライン ユーティリティまたは対応する「compare」ant タスクを使用して、スナップショットを既知のベースラインと比較できます。利用可能ないくつかの比較があります。結果を HTML または機械可読形式 (CSV/XML) でエクスポートできます。

  2. jpexportコマンド ライン ユーティリティまたは対応する 「エクスポート」Ant タスクを使用して、スナップショットからデータを抽出できます。次に、独自のコードを記述して、特定の実行からのプロファイリング データを分析できます。

プロファイリング データの限られたセットについては、実際に JProfiler API を使用してProfiler.getTotalCallsMadeTo(Foo.class, "barMethod")、例のようなことを行う独自のプロファイラーを作成することができます。api/samples/platformJPofiler インストールの例を参照してください。ホット スポット データから情報を取得します。

ただし、特定のメソッドが呼び出されたかどうかについてアサーションを行うには、AOP ベースのアプローチを取ることをお勧めします。パフォーマンスの低下を検出するには、プロファイラー ベースのアプローチを使用するのが適切です。

免責事項: 私の会社は JProfiler を開発しています。

于 2012-05-18T09:04:00.050 に答える
2

これは、J2SE 組み込みのHPROF プロファイリング ツールで実行できることがわかりました。

java -agentlib:hprof=cpu=times MyTest

次のような形式のテキスト ファイルが生成されます。

CPU SAMPLES BEGIN (total = 126) Fri Oct 22 12:12:14 2004
rank   self  accum   count trace method
   1 53.17% 53.17%      67 300027 java.util.zip.ZipFile.getEntry
   2 17.46% 70.63%      22 300135 java.util.zip.ZipFile.getNextEntry
   3  5.56% 76.19%       7 300111 java.lang.ClassLoader.defineClass2
   4  3.97% 80.16%       5 300140 java.io.UnixFileSystem.list
   5  2.38% 82.54%       3 300149 java.lang.Shutdown.halt0
....

次に、ファイルを解析して、関心のあるメソッドを抽出するのは簡単です。ソリューションは完全に無料で、JSE が組み込まれているため、他のツールと比較して大きなメリットがあります。

于 2012-05-23T06:08:38.927 に答える