テスト中の Java プログラムに次の CLI オプションを指定して、起動時に JFR を開始しています。
-Xmx24g -XX:+UnlockCommercialFeatures -XX:+FlightRecorder
-XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true,settings=profile
テストの実行には 90 秒かかります。
Java Mission Control で JFR ダンプを開くと、JMC の [呼び出しツリー] タブは次のようになります。
1 秒あたりのサンプル数は 1 未満です。これにより、詳細のドリルダウン、ホット メソッド、および概要タブが実質的に役に立たなくなります。最初の調査の結果、メソッド サンプリングがデフォルトの 10 ミリ秒に設定されていることが判明しました。この予期しない結果は、90 秒の約 98% が、さまざまなデータベース読み取りの実行中にソケット I/O の待機に費やされたためです。 、そのため、残りの約 2% の時間のメソッド サンプルしか取得していません。
データベース結果の待機に最も時間を費やしているトレースを特定するために、I/O バウンドのサンプルをメソッド時間に含めるにはどうすればよいですか? このプロセスには複数の場所でデータベース クエリが含まれており、これらのクエリは他の複数の場所から呼び出されるため、低速な呼び出しパスを推測するのは簡単ではありません。