2017-12-12 11 views
2

私はJVMにglowroot(javaアプリケーション監視)をインストールしました。私のアプリケーションがアイドル状態になると、このようなグラフのメモリヒープの使用が得られます。パターンはほぼ均一に見える。誰かが説明して、グラフのように見えるのはなぜですか?気になります。なぜヒープメモリ使用量グラフがこのように見えるのですか?

enter image description here

+1

これは、通常、JVMがフルガベージコレクション(フルGC)に入ったときに発生します。 Javaランタイムは、もはや使用されていないメモリを解放しようとしますが、使用されているよりも速くメモリを消去することはできません。ある時点で、JVMはメモリ不足になり、ある程度のスペースを空ける必要があります。完全なGCに入ります。これは参照されていないすべてのデータを解放しようとする世界のプロセスを止めることです。慎重でないと異常なエラーが発生する可能性があります。GCが長くなるほど多くのオブジェクトを取得できます。 – flakes

+0

この質問はあなたにも役立ちます[なぜ鋸歯状のグラフですか?](https://stackoverflow.com/questions/7219532/why-a-sawtooth-shaped-graph) – flakes

答えて

1

これは仕事でJavaのガベージコレクションです。各ドロップは、未使用の参照を削除してメモリを解放するガベージコレクタです。アプリケーションが新しい参照を作成し続けるため、アプリケーションが再び成長する理由は単純です。

また、より詳細な、について説明のために、この記事を見てすることができます Why a sawtooth shaped graph?

1

(少なくとも)あなたがそれを観察しているので、それはそのように見えます。アプリケーションがまったく何もせず、割り当てを行うスレッドがなかった場合、ヒープの水平線が得られます。

しかし、あなたがそれを観察しているので、JVMでデータが返ってくることがあります。そういうわけで、多くの多くのプロファイリングの質問に見られるユビキタスな鋸歯状のパターンが得られます。以下にいくつかの例を示します。

java memory leak, visualvm showing wrong data

visualvm monitors memory usage

2

大規模な鋸歯状のパターンは、おそらくGCサイクルの間にメモリの使用率を表します。アプリケーションは、VMがGC(ポイント)を実行することを決定するのに十分なヒープが得られるまで、オブジェクトを着実に(アップスクロールライン)割り当てます。その後、GCは大量のゴミを回収し(急な落下)、プロセスが再び開始されます。

短いスパイクが上下にわかりにくいです。上向きのスパイクは、若い世代のサイクルを引き起こしている異常な「大きな」割当(短い生涯オブジェクトの)を表す可能性があります。下向きのスパイクは、「メモリ圧迫」に応答して解放されるキャッシュされたオブジェクトを表している可能性があります。

スパイクをよりよく理解したい場合は、GCログメッセージを見て、それらをグラフと関連付ける必要があります。

関連する問題