• Java生成堆内存dump


    在处理压力测试问题的时候,经常遇到OOM的情况,这时候我们需要去记录内存实时的情况,一般会打出一个dump文件,而后再使用MAT等内存分析工具去查看哪些对象一直占用了大量内存,最终分析出代码需要优化的地方。

    那么java如何打出dump文件呢?

    java提供了jmap命令,如下:

    jmap -dump:format=b,file=/path/heap.bin 进程ID
    jmap -dump:live,format=b,file=/path/heap.bin 进程ID
    live参数:

    表示我们需要抓取目前在生命周期内的内存对象,也就是说GC收不走的对象,然后我们绝大部分情况下,需要的看的就是这些内存。而且会减小dump文件的大小。

    在命令行下可以直接运行,当然使用java也可以按指定方式执行,示例如下:

    package com.szh;

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Scanner;
    import java.util.concurrent.TimeUnit;

    public class TestDump {
    public static void main(String[] args) throws InterruptedException, IOException {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
    Runtime runtime = Runtime.getRuntime();

    Scanner scanner = new Scanner(System.in);
    System.out.println("请输入java进程PID:");
    int pID = scanner.nextInt();
    System.out.println("请输入dump文件输出路径:");
    String dumpPath = scanner.next();
    scanner.close();

    if (!dumpPath.endsWith(File.separator)) {
    dumpPath = dumpPath + File.separator;
    }
    String cmd = "jmap -dump,format=b,file=" + dumpPath + "_" + sdf.format(new Date()) + ".bin " + pID;
    runtime.exec(cmd);
    TimeUnit.SECONDS.sleep(5L);

    while (true) {
    cmd = "jmap -dump:live,format=b,file=" + dumpPath + "_" + sdf.format(new Date()) + ".bin " + pID;
    Process process = runtime.exec(cmd);
    /*InputStreamReader isr = new InputStreamReader(process.getInputStream(), "GBK");
    BufferedReader br = new BufferedReader(isr);
    while (true) {
    String str = br.readLine();
    if (str == null) {
    break;
    }
    System.out.println(str);
    }*/
    TimeUnit.HOURS.sleep(1L);
    }
    }
    }
     
    ————————————————
    原文链接:https://blog.csdn.net/songzehao/article/details/84575834

  • 相关阅读:
    python基础-正则2
    python基础-正则1
    python基础-私有变量和方法
    「SCOI2015」小凸玩密室 解题报告
    「JLOI2015」骗我呢 解题报告?
    「JLOI2015」城池攻占 解题报告
    【模板】左偏树(可并堆)
    网络流24题 餐巾计划问题 解题报告
    「JLOI2015」管道连接 解题报告
    [WC2008]游览计划 解题报告
  • 原文地址:https://www.cnblogs.com/xd502djj/p/12176568.html
Copyright © 2020-2023  润新知