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
说明:垃圾收集统计信息