10

現在、パフォーマンスハンティング中です。スループットを測定し、回帰しないようにするために、私は素晴らしい JMH を使用しています。

JMH の作者が書いているこのリンクによると、何か遅いものに出くわしたら、プロファイリングを開始して何が起こっているのかを確認したいと思います。

JMH プロファイラーは分析を支援しますが、適切なプロファイリングに代わるものではないと思います。たとえば、「スタック」プロファイラーは、プロファイルをざっと見るのには適していますが、本格的な作業には適していません。

ワークロードを長時間実行し、選択したプロファイラーを実行中の VM に接続します。

コマンドラインからJMHテストを微調整して、visualvmのようなものをそれに接続できることを密かに望んでいました...しかし、これまでのところ、それを機能させることができました。それは悪い考えだと思いますか?プロファイリングに使用するコードと、適用に使用するコードを共有できれば理想的です。

4

3 に答える 3

5

はい、可能です。簡単に実行できます。ベスト プラクティスとして常に実行することをお勧めします。問題を再現するために余分な時間を費やすことなく、何が起こっているかを説明するためにデータを利用できることは常に良いことです.

JFR (Java Flight Recorder) を使用するために、独自の JMH プロファイラーを作成しました: JmhFlightRecorderProfilerは、ベンチマークの終了時に JMH プロファイリングを開始し、データをファイルに保存します。このファイルは、JDK に同梱されている Java Mission control で開くことができます。

ベンチマークを開始して使用する方法は次のとおりです (完全な例)。

Options opt = new OptionsBuilder()
        .include(".*")
        .addProfiler(JmhFlightRecorderProfiler.class)
        .jvmArgs("-Xmx256m", "-Xms256m", "-XX:+UnlockCommercialFeatures",
                "-Djmh.stack.profiles=" + destinationFolder,
                "-Djmh.executor=FJP",
                "-Djmh.fr.options=defaultrecording=true,settings=" + profile)
        .result(destinationFolder + "/" + "benchmarkResults.csv")
        .resultFormat(ResultFormatType.CSV)
        .warmupIterations(10)
        .measurementIterations(10)
        .forks(1)
        .build();
 new Runner(opt).run();

標準ビルド中にベンチマークを実行し、Jenkins JMH プラグインを使用してベンチマークの結果/ビルドを監視/傾向分析し、何らかの劣化が観察された場合は、潜在的な原因を調査するためにベンチマーク プロファイルを利用できるようにします。

于 2016-06-16T11:21:51.597 に答える