• 首页

  • 归档

  • 清单
    歌单 分类 标签

  • 心情

  • 画廊

  • 关于

  • 友链

  • 留言板
H i , X i a o y a o
H i , X i a o y a o

逍遥叹

那一年,我也变成了光!!

10
14
JVM调优

JVM内置故障排查工具:jmap

发表于 2020-10-14 • jvm jvm调优工具 • 被 65 人看爆

作用

jmap全称Java Memory Map,用来展示对象内存映射或堆内存详细信息。

TIPS

  • 此命令是实验性的,不受支持,对于JDK9及更高版本,部分功能可使用 jhsdb jmap 代替,也可用jcmd代替。
  • 部分JDK版本的jmap命令对Windows支持比较有限,参数较少。本文为了更加接近生产环境,都是基于类Unix操作系统编写的。如果在Windows操作系统下测试,应以jmap -h的结果为准。

参考文档

  • Java 8 Unix:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jmap.html
  • JDK 8 Windows:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/jmap.html
  • Java 11:https://docs.oracle.com/en/java/javase/11/tools/jmap.html#GUID-D2340719-82BA-4077-B0F3-2803269B7F41

使用说明

命令如下:

➜  jmap -h
Usage:
    jmap -clstats <pid>
        to connect to running process and print class loader statistics
    jmap -finalizerinfo <pid>
        to connect to running process and print information on objects awaiting finalization
    jmap -histo[:live] <pid>
        to connect to running process and print histogram of java object heap
        if the "live" suboption is specified, only count live objects
    jmap -dump:<dump-options> <pid>
        to connect to running process and dump java heap
    jmap -? -h --help
        to print this help message

    dump-options:
      live         dump only live objects; if not specified,
                   all objects in the heap are dumped.
      format=b     binary format
      file=<file>  dump heap to <file>

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

命令格式:

jmap [options] pid

options的可选项如下:

  • -clstats:连接到正在运行的进程,并打印Java堆的类加载器统计信息
  • -finalizerinfo:连接到正在运行的进程,并打印等待finalization的对象的信息
  • -histo[:live]:连接到正在运行的进程,并打印Java堆的直方图。如果指定了live子选项,则仅统计活动对象
  • -dump:dump_options:连接到正在运行的进程,并转储Java堆。其中,dump_options的取值为:
    • live:指定时,仅Dump活动对象;如果未指定,则转储堆中的所有对象
    • format=b:以hprof格式Dump堆
    • file=filename:将堆Dump到filename

使用示例

# 展示63120进程的类加载统计信息
jmap -clstats 63120

# 展示63120进程中等待finalization的对象的信息
jmap -finalizerinfo 63120

# 展示63120进程中堆的直方图
jmap -histo 63120

# 展示63120进程堆中存活对象的直方图
jmap -histo:live 63120

# Dump 63120这个进程中的存货对象的堆到dump.hprof文件
jmap -dump:live,format=b,file=dump.hprof 63120

拓展知识

要想获取Java堆Dump,除使用jmap外,还有以下方法:

  • 使用-XX:+HeapDumpOnOutOfMemoryError,让虚拟机在OOM异常出现后自动生成堆Dump文件;
  • 使用-XX:+HeapDumpOnCtrlBreak,可使用[Ctrl]+[Break],让虚拟机生成堆Dump文件;
  • 在Linux操作系统下,发送 kill -3 pid 命令;
  • 对于Spring Boot应用,也可以使用Spring Boot Actuator提供的/actuator/heapdump实现堆Dump。
分享到:
JVM内置故障排查工具:jstack
JVM内置故障排查工具:jinfo
  • 文章目录
  • 站点概览
逍遥叹

小小程序员-逍遥叹

那一年,我也变成了光!!

Github QQ Email RSS
看爆 Top5
  • 为什么要写这篇博客? 293次看爆
  • 开发手记:Centos环境常用命令 274次看爆
  • 学习笔记:Java中的锁 261次看爆
  • 学习笔记:Java动态代理 254次看爆
  • Could not get JDBC Connection问题排查 216次看爆

Copyright © 2021 逍遥叹 · 粤ICP备17164804号-1

Proudly published with Halo · Theme by fyang · 站点地图