3

プロファイリングされるアプリケーションが XX:MaxJavaStackTraceDepth システム プロパティを -1 に設定すると、Java Mission Control の使用に問題が発生します。

再現するには:

  1. Java アプリケーションを起動します: java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:MaxJavaStackTraceDepth=-1
  2. デフォルト設定を使用してそのアプリのフライト記録を作成する
  3. 生成されたレコードの「コード」セクションを表示します。次のように空になります: http://imgur.com/if27cUu

システム: Ubuntu 14.04/amd64。Java 1.8.0_72。

なぜこれが起こるのかについて何か提案はありますか? スタック トレースを無制限に維持したいと思います (スタック トレースの先頭がない限り、見つけるのが非常に難しいまれなスタック オーバーフロー例外のため)。

-1 値はここから来ます: http://stas-blogspot.blogspot.se/2011/07/most-complete-list-of-xx-options-for.html#MaxJavaStackTraceDepth

編集: 元の質問は、誤って java.endorsed.dirs システム プロパティに責任を負わせました。私はたくさんのプロパティ セットを持っていて、削除の過程で混乱したに違いありません。

4

1 に答える 1

3

-XX:MaxJavaStackTraceDepth=-1 で問題を再現でき、関連するバグが少なくとも 1 つ見つかりました - https://bugs.openjdk.java.net/browse/JDK-7179701。これは優先度の低いバグです。現在JDK 10を対象としています....代わりに -XX:FlightRecorderOptions=stackdepth=2048 を使用することをお勧めします。私もこのオプションについて多くの実験を行ったとは言えませんが、少なくとも JFR で動作するように設計されています。

于 2016-02-01T11:53:15.783 に答える