2010-12-04 10 views
7

GCログの分析(つまり、-XXから取得したものの分析:+ PrintGCWhatever)ではなく、GCに費やされた時間と収集されたメモリの量をトラッキングしたいと思います。 JVMのGCイベントのプログラム通知

は、私は私にいくつかのGCInfoオブジェクト含むメモリ情報を与えることができるのGarbageCollectorMXBeanを取得するには、SunのManagementFactoryにを使用できることがわかったが、私はこの平均を介してすべての GCを 集めることができる保証はありません。

誰でもコード内でこれを行う方法を知っていますか?

答えて

4

GarbageCollectorMXBeanは、私がSun JVMで見つけた最高のものです。私の経験では、実際にあなたが求めているものにかなり近くなっています。

GCの統計情報を取得するために時々起きる専用のスレッドがあると思います。これは、統計が収集されるときに何らかの決定論を加えるだろう。

+0

それは私が自分自身を見つけたものです。しかし、私はGCMXbeanの振る舞いについてはわかりません。 getGCInfo()のドキュメントは、 "最新のGCInfoを返します"と指示しますが、*すべての* GCInfoを返すわけではありません。これは事実であり、これを自分自身で理解しようとする前に、誰かが答えを知っているかどうかを知ることに興味があります。 – insitu

+1

ところで、私はこのリンクhttp://robertmaldon.blogspot.com/2007/09/more-human-friendly-java-gc-timestamps.htmlを見つけました。これは、私が探しているものにかなり近いものですが、正確ではありません。 – insitu

0

この情報を取得するツールの範囲が与えられている場合、GCの動作を分析して最適化する方が良いでしょう。例えばメモリプロファイラを使用します。

問題は、問題の解決策を指摘しない限り、情報があまり役に立たないということです。 (あなたはそれを修正することができます)

+3

私は同意しません。もちろん、サーバーのアプリケーション内でGC統計情報を収集します(これはレイテンシに敏感なので、GCは大したことです)。**これは**問題があることを警告します。たとえば、パターンの変更を使用します。 **問題の把握と修正**はもちろん、さまざまなツールを必要とします。 – NPE

+0

私が達成しようとしているのは、セットアップ/解析/解析の複雑さを軽減するためにJava内から使用するものです。 jstatと友人は素晴らしく、サードパーティのツール(大部分は私が気づいていないことが多い)がたくさんありますが、それはプロセスを起動し、出力を分析することを意味します。すべての情報が私が実行しているJVMから来ているとすれば、JVM内からこの情報にアクセスする方法があると思うかもしれません。 – insitu

関連する問題