一、基本语法

1.1、语法

  1. jmap [ option ] pid
  2. jmap [ option ] executable core
  3. jmap [ option ] [server-id@]remote-hostname-or-IP
  4. # for example
  5. jmap -dump:format=b,file=/tmp/HeapDump.hprof <pid>

1.2、option 解析

1.2.1、-dump 参数

  1. -dump:[live,]format=b,file=<filename>
  2. # live 存活的对象
  3. # format=b 文件格式,b 二进制流的形式
  4. # file 导出的文件名称

1.2.2、-finalizerinfo

  • 打印正在等待回收的对象

1.2.3、-heap

  • 打印一个堆的总体概要。使用的GC算法,堆的内存分配和 新生代和老年代的使用情况

1.2.4、-histo[:live]

  • 打印堆的直方图

    • 类的数量
    • 占用的内存大小(字节)
    • 类的全限定类名

      1.2.5、-permstat

  • 打印载入堆永久代的类加载器的统计

    1.2.6、-F

    1.2.7、-h

  • 打印帮助信息

    1.2.8、-J

二、使用解析

2.1、打印当前堆概括

2.1.1、命令

  1. jmap -heap pid

2.1.2、禁止访问进程的内存状态处理

  1. # 临时开启
  2. echo 0 > /proc/sys/kernel/yama/ptrace_scope
  3. # 永久开启:
  4. /etc/sysctl.d/10-ptrace.conf
  5. #添加或修改为以下这一句:(0:允许, 1:不允许)
  6. kernel.yama.ptrace_scope = 0

2.1.3、打印信息

  1. Debugger attached successfully.
  2. Server compiler detected.
  3. JVM version is 25.312-b07
  4. # GC 分配算法(线程本地变量 或 指针碰撞),这里使用线程本地变量
  5. using thread-local object allocation.
  6. # GC 垃圾收集器
  7. Parallel GC with 8 thread(s)
  8. # 堆的配置
  9. Heap Configuration:
  10. MinHeapFreeRatio = 0
  11. MaxHeapFreeRatio = 100
  12. MaxHeapSize = 2067791872 (1972.0MB) # 最大堆,默认机器内存的1/4
  13. NewSize = 42991616 (41.0MB) # 新生代
  14. MaxNewSize = 688914432 (657.0MB) # 最大新生代内存
  15. OldSize = 87031808 (83.0MB) #老年代
  16. NewRatio = 2 # 新生代和老年代的比例
  17. SurvivorRatio = 8 # suivivor 区的比例 8:1:1
  18. MetaspaceSize = 21807104 (20.796875MB) # 元空间
  19. CompressedClassSpaceSize = 1073741824 (1024.0MB)
  20. MaxMetaspaceSize = 17592186044415 MB # 最大元空间内存
  21. G1HeapRegionSize = 0 (0.0MB) # G1 堆区域大小
  22. # 堆使用情况
  23. Heap Usage:
  24. PS Young Generation
  25. Eden Space:
  26. capacity = 94371840 (90.0MB)
  27. used = 32290664 (30.794776916503906MB)
  28. free = 62081176 (59.205223083496094MB)
  29. 34.21641879611545% used
  30. From Space:
  31. capacity = 5242880 (5.0MB)
  32. used = 5231264 (4.988922119140625MB)
  33. free = 11616 (0.011077880859375MB)
  34. 99.7784423828125% used
  35. To Space:
  36. capacity = 5242880 (5.0MB)
  37. used = 0 (0.0MB)
  38. free = 5242880 (5.0MB)
  39. 0.0% used
  40. PS Old Generation
  41. capacity = 67108864 (64.0MB)
  42. used = 13446200 (12.823295593261719MB)
  43. free = 53662664 (51.17670440673828MB)
  44. 20.036399364471436% used
  45. 13050 interned Strings occupying 1147280 bytes.

2.2、导出dump 文件

2.2.1、命令

  1. jmap -dump:format=b,file=/tmp/HeapDump.hprof pid

参考