1

コンテキストの初期化は60秒から約15分に跳ね上がりました。遅い場合と速い場合の両方で、最終的には正常に起動します。どちらの方法でも致命的なエラーはありません。ブレークポイントを設定する(またはブレークポイントロギングを追加する)ための特定のロギング設定または提案されたクラスはありますか?

その動作が始まったリビジョンはすでに見つかりましたが、何が原因でこれほど時間がかかるのかは明らかではありません。とりわけ、DefaultListableBeanFactory全体にブレークポイントを設定しました。これは大きなアプリケーションであるため、ある時点でコールスタックはBeanの取得と作成に数百の深さを持っていますが、それを以前のリビジョン(すぐに終了する)と比較すると、同様の性質が示されます。遅い改訂と速い改訂の間で、異常なことは何も現れません。

「遅い部分」を介してランダムなポイントで実行を一時停止しました。スタックトレースは妥当であるように見え、必要に応じて新しいBeanをインスタンス化し、可能な場合はプロパティを設定します(これにより、より再帰的なdoCreateBean呼び出しなどが発生する可能性があります)。

私はまだプロファイラーを設定することを気にしませんでしたが、それが役立つかどうかは疑わしいです。遅いリビジョンがすべての時間を費やすコード(Beanファクトリ、コンテキストinit)は、もちろん、速いリビジョンもほとんどの時間を費やすコードと同じです。

4

1 に答える 1

0

詳細な GC ログを確認することをお勧めします。何らかの形で多くのオブジェクトを作成している可能性があり、1) 「余分な」Bean を示すヒープが絶えず成長している、または 2) 多くのオブジェクト作成を示しているが、あまり固執していない (追加されることによって) 多数のナーサリ GC が表示されるコンテキストに)。

#1 については、Eclipse MATのようなツールを使用すると、最もメモリを消費しているオブジェクトのヒープ ダンプを分析できます。

#2については、プロファイラーが引き続き役立ちます。費やした時間ではなく、行われた通話の数を見てください。膨大な回数呼び出されているコンストラクターまたはその他の create / init メソッドを見つけたいと思うでしょう。そこから遡って、問題のある Bean を見つけることができます。

于 2012-07-27T01:18:30.363 に答える