健康Javaのヒープメモリダンプ

ストレステストの問題が、頻繁に発生する状況OOM、この時間に対処する上で、我々は、メモリのリアルタイムの状況を記録し、通常はダンプファイルを再生し、その後、多くのメモリを占有されているオブジェクトを参照するためにMATと他のメモリ解析ツールを使用する必要があります、最終的な分析ではローカルコードは、最適化が必要です。

それでは、どのようにJavaのダンプファイルを再生するには?

次のようにJavaは、jmapはコマンドが用意されています。

jmapの-dump:フォーマット= B、ファイル= /パス/ heap.bin进程ID
jmapの-dump:ライブ、形式= B、ファイル= /パス/ heap.bin进程ID
参数ライブ。

私たちは、ほとんどの場合、その後、GC近いオブジェクトは行っていないことを意味し、ライフサイクルにおける現在のメモリオブジェクトをつかむ必要があることを意味し、次のように表示する必要がこれらのメモリということです。そしてそれは、ダンプ・ファイルのサイズを小さくします。

もちろん、例えば、指定されたJavaを使用して実行することができ、コマンドラインから直接実行することができます:

パッケージcom.szh。

輸入java.io.BufferedReader;
インポートのjava.io.File;
インポートにjava.io.IOException;
輸入java.io.InputStreamReader;
輸入java.text.SimpleDateFormatの。
輸入java.util.Date;
インポートjava.util.Scanner;
輸入java.util.concurrent.TimeUnit。

パブリッククラスTestDump {
公共の静的な無効メイン(文字列[]引数)はInterruptedExceptionあるは、IOException {スロー
てSimpleDateFormat SDF =新しいてSimpleDateFormat( "yyyy_MM_dd_HH_mm_ssを");
ランタイムランタイム= Runtime.getRuntime()。

スキャナスキャナ=新しいスキャナ(System.in)。
System.out.println( "请输入javaの进程PID:");
INT PID = scanner.nextInt()。
System.out.println( "请输入ダンプ文件输出路径:");
ストリングdumpPath = scanner.next()。
scanner.close();

(!dumpPath.endsWith(File.separator)){場合
dumpPath = dumpPath + File.separator。
}
文字列= "jmapの-dump、形式= B、ファイル=" + dumpPath + "_" + sdf.format(新しいDate())+ + PID "の.binを" cmdを。
Runtime.exec(CMD)。
TimeUnit.SECONDS.sleep(5L)。

一方、(TRUE){
CMD = "jmapの-dump:ライブ、形式= B、ファイル=" + dumpPath + "_" + sdf.format(新しいDate())+ + PID ".binの";
プロセス工程のRuntime.exec =(CMD)。
/ * InputStreamReaderのISR =新しいInputStreamReaderの(process.getInputStream()、 "GBK");
BufferedReaderのBR =新しいBufferedReaderの(ISR)。
一方、(TRUE){
文字列str = br.readLine();


}
のSystem.out.println(STR);
} / *
TimeUnit.HOURS.sleep(1L);
}
}
}
 
----------------
説明リンク:https://でブログ。 csdn.net/songzehao/article/details/84575834

 

おすすめ

転載: www.cnblogs.com/xd502djj/p/12176568.html