14

アプリケーションの GC 動作を分析しようとしています ( Tomcatで実行され、 Sun の Hotspots の下で、JVM 1.6で実行されます)。

これまでのところ、JVM に GC ログを別のファイルに出力するように指示しました...

-Xloggc:gc.log 
-XX:+PrintGCApplicationStoppedTime 
-XX:+PrintGCApplicationConcurrentTime 
-XX:+PrintGC 
-XX:+PrintGCTimeStamps 
-XX:+PrintGCDetails

...そしてjstatを使用してログを出力しました...

jstat -gc -t 29045 5s > jstat.gc

興味深い情報が表示されていますが、これらのログを分析/視覚化するのに役立つツールが見つかりません。この質問でGCViewer を指摘されましたが、gc.log からいくつかのログ行を解析するだけで、例外が発生してクラッシュします。私が使用している特定の JVM について、これらの特定のログを解析するためのより優れた、またはより最新のツールはありますか?

4

7 に答える 7

6

gcviewer何年も更新されていないため、ヒットまたはミスがあります.gcファイルには正常に動作するものもあれば、例外が発生するものもあります.

IBM の gc ログ パーサーは問題なく動作し ます。 http://www.alphaworks.ibm.com/tech/pmat/faq

Sun には GCPortal と呼ばれるものがありますが、次のものが必要です。

  • Web アプリケーション サーバーにインストールする
  • awk と perl のインストール
  • JDBC ドライバーと構成を使用した RDBMS のインストール
  • そして、以前は無料でしたが、現在は無料ではない、真のキラーであるサードパーティのグラフ/チャート ソフトウェアです。すばらしい。

gchistoプロジェクトには何もありません。

HPJmeter は IBM gc ファイルを認識しません。

于 2010-07-16T20:17:16.660 に答える
3

IBM Support Assistantで使用できるツールは、非常に優れた機能を果たします。

于 2011-03-30T16:47:56.250 に答える
3

私は個人的にHP JMeterを多くの GC ビジュアライゼーションに使用しています。SUN JRE では「問題なく」動作し、HP の JRE では非常にうまく動作します (図を参照)。

Sun HotSpot 1.6 (HP 以外のプラットフォーム) では、これらの GC オプションを使用して分析用のログを生成します。

-Xloggc:/path/to/vgc/log/location/logfile.vgc  --XX:+PrintHeapAtGC 
于 2009-12-03T16:28:42.753 に答える
2

jvisualvmを見ましたか?最新のJDKが付属しており、JVMを監視できます。サンプル出力 ( visualGCプラグインを使用)。出力例 -代替テキスト http://g4u0420c.houston.hp.com/en/5992-4687/img/visualgc_2.png

于 2009-12-03T17:13:42.870 に答える
0

Visual GC を使用しようとしましたが、id プロセス (jvm one または jstatd one) で動作するようです。jstat.gc では使用できません。つまり、ストリームではなくファイルです。それは正しいですか?

于 2009-12-23T22:40:53.057 に答える
0

gchisto (gchisto.dev.java.net) を使用してみてください。GC ログ出力を理解できます (G1 GC で動作するように更新されているかどうかはわかりません)。CVS からソースを取得し (そのためには dev.java.net アカウントが必要です)、これを自分でビルドする必要があります。

于 2010-03-04T07:46:36.540 に答える
0

これは 1.5 CMS コレクターに適した $0.00 のログ スクレーパーで、GC 一時停止の概要を表示します。

ログ行の構文と一致させるために、位置パラメータ $7 引数をタイムスタンプ関数に変更する必要がある場合があります (my .out は Tanuki Wrapper によって「拡張」されます)。

#! /usr/bin/awk -f
# Awk script to parse .out logs and print total of
# stop-the-world GC pause times in ten minute intervals

BEGIN {print "t\timark\tmark\tremark\tfullgc"}

/CMS-initial-mark:/ {
  t=timestamp($7);
  imark[t] += $(NF-1);
}

/\[CMS-concurrent-mark:/ {
  t=timestamp($7);
  split($(NF-1), b, "/");
#  print t" NF="NF" val="b[1];
  mark[t] += b[1];
}

/CMS-remark/ {
  t=timestamp($7);
  remark[t] += $(NF-1);
}

/\[Full GC / {
  t=timestamp($7);
  level=0;
  for (i=1; i<=NF; i++) {
      if ($i ~ /\[/) {
        level++;
      } else if ($i ~ /\]/) {
        level--;
      }
  }
  while (level > 0) {
    getline;
    for (i=1; i<=NF; i++) {
      if ($i ~ /\[/) {
        level++;
      } else if ( $i ~ /\]/ ) {
        level-- ;
      }
    }
  }
  if ( $(NF) ~ /secs\]/ ) {
    full[t] += $(NF-1) ;
  }
}

function timestamp(str) {
  split(str, a, ":");
  return a[1]":"substr(a[2],0,length(a[2])-1)"0";
}

# print out UK+US trading hours

END {
  for (hour = 5; hour <= 16; hour++) {
    for (minute = 0; minute <= 59; minute+=10) {
      t = sprintf("%02d:%02d", hour, minute);
      printf "%s\t%d\t%d\t%d\t%d\n", t, imark[t], mark[t], remark[t], full[t];
    }
  }
}
于 2010-06-11T20:54:10.950 に答える