• 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目录里面是jsk自带的

    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情况

    jconcole就会出现一个可视化的工具框,就可以查看堆内存使用情况,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

     

    频繁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

  • 相关阅读:
    在IDEA上本地更新同步Git中的更改
    protobuf的序列化和反序列化
    关于Pytorch报警告:Warning: indexing with dtype torch.uint8 is now deprecated, please use a dtype torch.bool instead
    990. 等式方程的可满足性
    死锁
    事务隔离
    Lab-1
    软件测试homework3
    TCP/UDP网络连接的固定写法
    软件测试Homework 2
  • 原文地址:https://www.cnblogs.com/kaibindirver/p/15873483.html
Copyright © 2020-2023  润新知