探讨过程:

jvm内存(堆内存)了解

jvm内存查看操作--笔记

IDE 改jvm内存大小 打印gc处理日志 ----jprofile内存分析工具使用和分析

一、Mac下查看已安装的jdk版本的home目录

/usr/libexec/java_home -V    (获得JDK的home目录路径)

Java jvm内存大小查询 jvm查看内存_jvm内存

 

Java jvm内存大小查询 jvm查看内存_老年代_02

 

 

 

 


工具在jdk的bin目录里面是jdk自带的

1、查看java项目jvm内存的大小

1-1:用代码 

 

1-2:用 通过jps查看服务的pid,选择要监控的jvm,执行jmap -heap pid

jps

 

查看虚拟机唯一id

 

 

jps -m 运行时传入主类的参数;
jps -v 虚拟机参数;  ----这个可以看到启动时 设置的内存大小
jps -l 运行的主类全名 或者jar包名称;

 

jps     运行的主类

 

 

 

Java jvm内存大小查询 jvm查看内存_Java jvm内存大小查询_03

 

jmap -heap  1993        -----这个我jdk8执行失败 见

查看jvm内存情况

 

Java jvm内存大小查询 jvm查看内存_Java jvm内存大小查询_04

 

 

 

2、实时查看内存和cpu情况

jconsole就会出现一个可视化的工具框,就可以查看堆内存使用情况,cpu占有率。直接运行jconcole.exe,如下图所示: 

Java jvm内存大小查询 jvm查看内存_Java jvm内存大小查询_05

 

 

 

3、jmap它可以生成 java 程序的 dump 文件,可实现与-XX:+HeapDumpOnOutOfMemoryError相同的效果

jmap -dump:live,format=b,file=myjmapfile.hprof 19570

file=后面也可以指定文件存放的目录

使用 JProfile 内存分析工具打开 

 

mat工具点这里看

 

4、Jstat监视虚拟机运行时的状态信息

堆内存统计

jstat -gccapacity

Java jvm内存大小查询 jvm查看内存_垃圾回收_06

 

 

  • NGCMN:新生代最小容量
  • NGCMX:新生代最大容量
  • NGC:当前新生代容量
  • S0C:第一个幸存区大小
  • S1C:第二个幸存区的大小
  • EC:伊甸园区的大小
  • OGCMN:老年代最小容量
  • OGCMX:老年代最大容量
  • OGC:当前老年代大小
  • OC:当前老年代大小
  • MCMN:最小元数据容量
  • MCMX:最大元数据容量
  • MC:当前元数据空间大小
  • CCSMN:最小压缩类空间大小
  • CCSMX:最大压缩类空间大小
  • CCSC:当前压缩类空间大小
  • YGC:年轻代gc次数
  • FGC:老年代GC次数

 

垃圾回收统计 (看下是否频繁fullGC)

Java jvm内存大小查询 jvm查看内存_jvm内存_07

  • S0C:第一个幸存区的大小
  • S1C:第二个幸存区的大小
  • S0U:第一个幸存区的使用大小
  • S1U:第二个幸存区的使用大小
  • EC:伊甸园区的大小
  • EU:伊甸园区的使用大小
  • OC:老年代大小
  • OU:老年代使用大小
  • MC:方法区大小
  • MU:方法区使用大小
  • CCSC:压缩类空间大小
  • CCSU:压缩类空间使用大小
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收消耗时间
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间


频繁GC问题或内存溢出问题

一、使用jps查看线程ID

二、使用jstat -gc 3331 250 20 查看gc情况,一般比较关注PERM区的情况,查看GC的增长情况。     -------这个不错 可以一段时间内一直打印出内存使用情况

三、使用jstat -gccause:额外输出上次GC原因

四、使用jmap -dump:format=b,file=heapDump 3331生成堆转储文件

五、使用jhat或者可视化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)分析堆情况。

六、结合代码解决内存溢出或泄露问题。

应用的GC负载过高。GC暂停时间越长,应用的吞吐量越低。

jstack 生成线程快照,定位线程长时间停顿的原因

 

个人觉得不错的(有空看下)

https://www.javatang.com/archives/2017/10/20/12131956.html

 

 

 

 

资料铺垫\原理科普: 

深入理解java虚拟机(全章节完整) 

 

 

 

Jstat 是 JDK 自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”。Jstat 位于 java 的 bin 目录下,主要利

用 JVM 内建的指令对 Java 应用程序的资源和性能进行实时的命令行的监控,包括了对 Heap size 和垃圾回收状况的监控。常用命令如下:

命令 1:

jstat -class pid

例子:

jstat -class 2236

说明:类加载信息相关

命令 2:

jstat -gc pid [time]

例子:

jstat -gc 2236

说明:堆垃圾收集统计信息

命令 3:

jstat -gcutil pid例子:

jstat -gcutil 2236

说明:垃圾收集统计信息