java命令--jmap工具

Jmap

命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。

系统中内存飙升了,怎么办?

使用jmap看看是否有大量类生成

image-20230228231003015

- histo

查看堆内存信息,实例个数以及占用内存大小

  • 命令: ~ jmap -histo 91656 > ./log.txt
  • 结果分析
    • num:序号
    • instances:实例数量
    • bytes:占用空间大小
    • class name:类名称 [C is a char[],[S is a short[],[I is a int[],[B is a byte[],[[I is a int[][]

‐dump

生成Java虚拟机的堆转储快照dump文件

  • 命令 jmap -dump:live,format=b,file=heap.bin <pid>

  • 运行结果

    1
    2
    ➜  ~ jmap -dump:live,format=b,file=eureka.hprof 3548
    Dumping heap to /Users/panyurou/eureka.hprof ...
  • 也可以设置内存溢出自动导出dump文件(内存很大的时候,可能会导不出来)

    • -XX:+HeapDumpOnOutOfMemoryError
    • -XX:HeapDumpPath=./ (路径)
  • 示例代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class OOMTest {
    // JVM设置 :‐Xms10M ‐Xmx10M ‐XX:+PrintGCDetails
    // ‐XX:+HeapDumpOnOutOfMemoryError ‐XX:HeapDumpPath=/Users/panyurou/jvm.hprof
    public static void main(String[] args) {
    List<Object> list = new ArrayList<>();
    int i = 0;
    int j = 0;
    while (true) {
    list.add(new User(i++));
    new User(j--);
    }
    }
    }

    运行配置:

    image-20230228231024765

    运行结果:

    image-20230228231032270

  • 用jvisualvm命令工具导入该dump文件分析

    image-20230228231039259


java命令--jmap工具
http://example.com/java命令--jmap工具/
作者
Panyurou
发布于
2022年9月13日
许可协议