jvm内存查看操作--笔记

探讨过程:

jvm内存(堆内存)了解

jvm内存查看操作--笔记

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

 

 

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

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

 

 

 

 

 

 下面的参考: https://www.cnblogs.com/curedfisher/p/12839485.html

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

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

1-1:用代码 见 https://www.cnblogs.com/kaibindirver/p/15982389.html

 

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

jps

 

查看虚拟机唯一id

 

 

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

 

jps     运行的主类

 

 

 

 

jmap -heap  1993        -----这个我jdk8执行失败 见 https://blog.csdn.net/claram/article/details/104628583

查看jvm内存情况

 

 

 

 

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

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

 

 

 

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

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

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

使用 JProfile 内存分析工具打开  见: https://www.cnblogs.com/kaibindirver/p/15982389.html

 

mat工具点这里看

 

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

堆内存统计

jstat -gccapacity

 

 

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

 

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

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

其他属性见 https://www.cnblogs.com/lizhonghua34/p/7307139.html

 

凡哥说 fullgc 一个小时执行1次比较合理

频繁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.cnblogs.com/kongzhongqijing/articles/3630264.html

 

 

泽嵩大佬推荐

https://www.cnblogs.com/sxdcgaq8080/p/11089664.html

 

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

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

 

 

 

 

资料铺垫\原理科普: 

深入理解java虚拟机(全章节完整) https://blog.csdn.net/belongtocode/article/details/104234810

 

 

 

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

说明:垃圾收集统计信息

 

posted @ 2022-02-09 01:28  凯宾斯基  阅读(1535)  评论(6编辑  收藏  举报