SunのJVMにはHeapDumpBeforeFullGCっていうオプションがあります。知ってました?このキーワードでぐぐっても200件程度しかひっかからないので知らない人も多いんじゃないかと思います。
あまり知られてなさそうなこのオプション。実はすごいできる子です。なんと、名前のとおりFullGC直前にヒープダンプだしてくれます。たとえばYoung領域使いすぎで昇格してしまうようなオブジェクトを探すときにこのオプション使うと大活躍してくれます。
このオプションは普通のオプションと違うので例によって-XX:+...
で使います。こんな感じです。
1 |
java -XX:+HeapDumpBeforeFullGC Main |
これと似たようなオプションは他に以下のものがあります。大体名前で想像つきますね。
- HeapDumpBeforeFullGC
- HeapDumpAfterFullGC
- PrintClassHistogramBeforeFullGC
- PrintClassHistogramAfterFullGC
これらのオプションはおそらくJava6からしか使えないと思います。使えるかを確認する場合は以下のコードを試してみてください。この手のオプションを一覧してくれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.lang.management.*; import javax.management.*; import javax.management.openmbean.*; public class JavaDiagOptions { public static void main(String[] args) throws Exception { MBeanServer server = ManagementFactory.getPlatformMBeanServer(); ObjectName oname = new ObjectName("com.sun.management:type=HotSpotDiagnostic"); for (CompositeData data : (CompositeData[]) server.getAttribute(oname, "DiagnosticOptions")) { System.out.println(String.format("%s:%s", data.get("name"), data.get("value"))); } } } |
パフォーマンスチューニングのお供にどうぞ。
おしまい。
最近のコメント