java JVM 内存GC查看

这篇具有很好参考价值的文章主要介绍了java JVM 内存GC查看。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、介绍jstat

jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下:

jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]

1、命令格式

jstat命令命令格式: jstat [Options] vmid [interval] [count] 参数说明:

  • Options,选项,我们一般使用 -gcutil 查看gc情况

  • vmid,VM的进程号,即当前运行的java进程号

  • interval,间隔时间,单位为秒或者毫秒

  • count,打印次数,如果缺省则打印无数次

2、示例

通常运行命令如下:

  • 直接使用ps -ef | grep java查看java进程

  • jstat -gc 24076 5000

  • 即会每5秒一次显示进程号为24076的java进成的GC情况,

  • 如下表示分析进程id为24076的gc情况,每隔1000ms打印一次记录,打印10次停止,每3行后打印指标头部

  • jstat -gc -h3 24076 1000 10

二、示例

1 、垃圾回收统计jstat -gc pid

jvm查看gc情况,java,jvm,开发语言

 其对应的指标含义如下:

  • S0C 年轻代中第一个survivor(幸存区)的容量 (字节)

  • S1C 年轻代中第二个survivor(幸存区)的容量 (字节)

  • S0U 年轻代中第一个survivor(幸存区)目前已使用空间 (字节)

  • S1U 年轻代中第二个survivor(幸存区)目前已使用空间 (字节)

  • EC 年轻代中Eden(伊甸园)的容量 (字节)

  • EU 年轻代中Eden(伊甸园)目前已使用空间 (字节)

  • OC Old代的容量 (字节)

  • OU Old代目前已使用空间 (字节)

  • MC 方法区大小

  • MU 方法区目前已使用空间 (字节)

  • CCSC 压缩类空间大小

  • CCSU 压缩类空间已使用大小

  • YGC 从应用程序启动到采样时年轻代中gc次数

  • YGCT 从应用程序启动到采样时年轻代中gc所用时间(s)

  • FGC 从应用程序启动到采样时old代(全gc)gc次数

  • FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)

  • GCT 从应用程序启动到采样时gc用的总时间(s)

2、类加载统计 jstat -class pid

jvm查看gc情况,java,jvm,开发语言

  • Loaded:加载class的数量

  • Bytes:所占用空间大小

  • Unloaded:未加载数量

  • Bytes:未加载占用空间

  • Time:时间

3、编译统计jstat -compiler pid

jvm查看gc情况,java,jvm,开发语言

  • Compiled:编译数量。

  • Failed:失败数量

  • Invalid:不可用数量

  • Time:时间

  • FailedType:失败类型

  • FailedMethod:失败的方法

4、JVM编译方法统计 jstat -printcompilation pid

jvm查看gc情况,java,jvm,开发语言

  • Compiled:最近编译方法的数量

  • Size:最近编译方法的字节码数量

  • Type:最近编译方法的编译类型。

  • Method:方法名标识。

5、堆内存统计jstat -gccapacity pid

  

jvm查看gc情况,java,jvm,开发语言

  • NGCMN:新生代最小容量

  • NGCMX:新生代最大容量

  • NGC:当前新生代容量

  • S0C:第一个幸存区大小

  • S1C:第二个幸存区的大小

  • EC:伊甸园区的大小

  • OGCMN:老年代最小容量

  • OGCMX:老年代最大容量

  • OGC:当前老年代大小

  • OC:当前老年代大小

  • MCMN:最小元数据容量

  • MCMX:最大元数据容量

  • MC:当前元数据空间大小

  • CCSMN:最小压缩类空间大小

  • CCSMX:最大压缩类空间大小

  • CCSC:当前压缩类空间大小

  • YGC:年轻代gc次数

  • FGC:老年代GC次数

6、 新生代垃圾回收统计jstat  -gcnew pid

 

jvm查看gc情况,java,jvm,开发语言

  • S0C:第一个幸存区大小

  • S1C:第二个幸存区的大小

  • S0U:第一个幸存区的使用大小

  • S1U:第二个幸存区的使用大小

  • TT:对象在新生代存活的次数

  • MTT:对象在新生代存活的最大次数

  • DSS:期望的幸存区大小

  • EC:伊甸园区的大小

  • EU:伊甸园区的使用大小

  • YGC:年轻代垃圾回收次数

  • YGCT:年轻代垃圾回收消耗时间

7、 新生代内存统计jstat  -gcnewcapacity pid

 

jvm查看gc情况,java,jvm,开发语言

  • NGCMN:新生代最小容量

  • NGCMX:新生代最大容量

  • NGC:当前新生代容量

  • S0CMX:最大幸存1区大小

  • S0C:当前幸存1区大小

  • S1CMX:最大幸存2区大小

  • S1C:当前幸存2区大小

  • ECMX:最大伊甸园区大小

  • EC:当前伊甸园区大小

  • YGC:年轻代垃圾回收次数

  • FGC:老年代回收次数

8、老年代垃圾回收统计 jstat  -gcold pid

 

jvm查看gc情况,java,jvm,开发语言

  • MC:方法区大小

  • MU:方法区使用大小

  • CCSC:压缩类空间大小

  • CCSU:压缩类空间使用大小

  • OC:老年代大小

  • OU:老年代使用大小

  • YGC:年轻代垃圾回收次数

  • FGC:老年代垃圾回收次数

  • FGCT:老年代垃圾回收消耗时间

  • GCT:垃圾回收消耗总时间

9、老年代内存统计 jstat  -gcoldcapacity pid

 

jvm查看gc情况,java,jvm,开发语言

  • OGCMN:老年代最小容量

  • OGCMX:老年代最大容量

  • OGC:当前老年代大小

  • OC:老年代大小

  • YGC:年轻代垃圾回收次数

  • FGC:老年代垃圾回收次数

  • FGCT:老年代垃圾回收消耗时间

  • GCT:垃圾回收消耗总时间

10、元数据空间统计(持久代)jstat  -gcmetacapacity pid

 

jvm查看gc情况,java,jvm,开发语言

  • MCMN: 最小元数据容量

  • MCMX:最大元数据容量

  • MC:当前元数据空间大小

  • CCSMN:最小压缩类空间大小

  • CCSMX:最大压缩类空间大小

  • CCSC:当前压缩类空间大小

  • YGC:年轻代垃圾回收次数

  • FGC:老年代垃圾回收次数

  • FGCT:老年代垃圾回收消耗时间

  • GCT:垃圾回收消耗总时间

11、查看full gc频率

ps -eo pid,tty,user,comm,lstart,etime | grep pid

jvm查看gc情况,java,jvm,开发语言

 三、总结垃圾回收统计(重点)

1、jstat命令用法: jstat -gcutil PID 1000

  • 找到PID:ps -ef |grep 进程名

  • jstat -gcutil PID 1000 表示每隔1s执行一次

  • 输出结果:

jvm查看gc情况,java,jvm,开发语言

  • S0:幸存1区当前使用比例

  • S1:幸存2区当前使用比例

  • E:伊甸园区使用比例

  • O:老年代使用比例

  • M:元数据区使用比例

  • CCS:压缩使用比例

  • YGC:年轻代垃圾回收次数

  • YGCT:年轻代垃圾回收消耗时间

  • FGC:老年代垃圾回收次数

  • FGCT:老年代垃圾回收消耗时间

  • GCT:垃圾回收消耗总时间

2、jstat分析JVM套路

1)jvm体系结构图

JVM 内存结构分为了 年轻代(Young) 、年老代(Old)、元空间(Perm) 年轻代:复制算法

所有新生成的对象首先都是放在年轻代的,年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象

jvm查看gc情况,java,jvm,开发语言

2)JVM 中 对象从创建到回收过程理解(结合上图理解)

a: YoungGC过程理解 新生代内存按照8:1:1的比例分为一个eden区和两个survivor(survivor0,survivor1)区。一个Eden区,两个 Survivor区。新new出来的对象会存储在 Eden(伊甸园)中,当这区域满了之后JVM会进行一次垃圾回收,在回收时把有用的对象存储在S1区,没用的就销毁此对象的内存空间,这过程即第一次YoungGC,如果S1区空间也满了后,同理会将有用的对象会放到S2区中,并释放S1空间,以上反复的回收即为YoungGC。

jvm查看gc情况,java,jvm,开发语言

b: FullGC过程理解 年轻代空间满了之后,会将满足一定活跃度的对象放到Old区中(对象活跃度:每个对象满足JVM默认count=15之后就判断是活跃对象,每次YoungGC后会将存活对象生命中+1,直到=15就转到Old区,这个次数可以通过:-XX:MaxTenuringThreshold来配置), 由于Full GC需要对整个堆进行回收,导致应用访问变慢,因此应该尽可能减少Full GC的次数。

jvm查看gc情况,java,jvm,开发语言

3、JVM内存回收如何判定回收不彻底?可能导致内存泄漏或溢出

如果 S0 、S1、 伊甸园区 这三个空间都有值的时候说明可能存在问题。

因为正常情况下是每次GC后,S0区、S1区中的空间总有一个是会被完全清空(根据GC垃圾回收算法),

因此S0 S1一直存在被占用时则回收不彻底,导致内存泄漏现象,随之时间拉长,甚至出现内存溢出(OOM)现象。

jvm查看gc情况,java,jvm,开发语言

 4、总结

  • 年轻代:复制算法

           所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象

  • 年老代:标记-清除或标记-整理算法

          在年轻代中经历了N次垃圾回收后仍然存活的对象,就会被放到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象

  • 在压力测试过程中发现Eden区内存增加过快,根据压测VU和业务判断是否合理,从而判断YoungGC频率是否正常。

  • FullGC频率一般在半小时一次较为正常,具体根据真实业务判断,那么在压力测试过程中,监控到FullGC次数过多,则需根据压测业务结合代码分析定位。

本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。文章来源地址https://www.toymoban.com/news/detail-813881.html

到了这里,关于java JVM 内存GC查看的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • JVM学习 GC垃圾回收机制 (堆内存结构、GC分类、四大垃圾回收算法)

    JVM学习 GC垃圾回收机制 (堆内存结构、GC分类、四大垃圾回收算法)

    🤖 作者简介: 努力的clz ,一个努力编程的菜鸟 🐣🐤🐥   👀 文章专栏: 《JVM 学习笔记》 ,本专栏会专门记录博主在学习 JVM 中学习的知识点,以及遇到的问题。   🙉 文章详情: 本篇博客是学习 【狂神说Java】JVM快速入门篇 的学习笔记,关于 GC垃圾回收机制 (堆内存结

    2023年04月19日
    浏览(10)
  • JVM基础知识(内存区域划分,类加载,GC垃圾回收)

    JVM基础知识(内存区域划分,类加载,GC垃圾回收)

    目录 内存区域划分 JVM中的栈 JVM中的堆 程序计数器 方法区(元数据区) 给一段代码,某个变量在哪个区域上? 类加载 类加载时机 双亲委派模型 GC 垃圾回收机制 GC 实际工作过程 1.找到垃圾/判定垃圾 1.可达性分析(Java中的做法) 2.引用计数 2.清理垃圾 1.标记清除 2.复制算法 3.标记整

    2024年02月07日
    浏览(15)
  • JVM 查看配置 jinfo 及使用 jstat,查看堆栈jstack及GC

    JVM 查看配置 jinfo 及使用 jstat,查看堆栈jstack及GC

    1. Jinfo  查看正在运行的Java应用程序的扩展参数: 包含 JVM 参数与 java 系统参数 命令:  jinfo pid    2 jstat  查看堆内存使用情况及 GC 回收频率等: jstat [-命令选项] [vmid] [间隔时间(毫秒)] [查询次数]  2.1 jstat -gc pid 最常用,可以评估程序内存使用及GC压力整体情况   

    2024年02月13日
    浏览(12)
  • SpringBoot自主监控,获取服务信息、JVM、CPU、内存、磁盘、堆、线程、GC等

    SpringBoot自主监控,获取服务信息、JVM、CPU、内存、磁盘、堆、线程、GC等

    1. 简介   在日常开发中一些关键的业务服务,期望在高并发状态下可以正常工作,或在异常情况时可以记录当时的性能信息,所以就需要进行监控。常见的监控例如: Prometheus 可以实现这个需求,如果需要更加简单方便的自主监控能力,可以引入本博客中的方案。 2. 相关博

    2024年02月15日
    浏览(12)
  • Java JVM中的GC机制详解

    垃圾回收(Garbage Collection,简称GC)机制是JVM中最重要的部分之一。在Java程序运行的过程中,运行时数据区域(包括堆和栈等内存区域)一直都需要使用和回收内存空间。由于Java中的内存分配方式是动态的,所以在程序运行期间,其内存空间的占用量会不断变化。 如果Java程

    2024年02月14日
    浏览(8)
  • CPU飙升 频繁GC排查-使用jmap histro命令来查看JVM中对象的直方图

    CPU飙升 频繁GC排查-使用jmap histro命令来查看JVM中对象的直方图

    jmap是Java Virtual Machine Tool的一部分,它允许您生成JVM堆转储文件并执行各种诊断操作。可以使用jmap histro命令来查看JVM中对象的直方图。 以下是使用jmap histro命令的语法: 参数pid是JVM进程的ID。请注意,您需要具有足够的权限才能执行此命令。 执行上述命令后,您将获得JVM堆

    2024年01月19日
    浏览(17)
  • 【Java】图解 JVM 垃圾回收(一):GC 判断策略、引用类型、垃圾回收算法

    【Java】图解 JVM 垃圾回收(一):GC 判断策略、引用类型、垃圾回收算法

    垃圾 是指运行程序中 没有任何引用指向的对象 ,需要被回收。 内存溢出 :经过垃圾回收之后,内存仍旧无法存储新创建的对象,内存不够溢出。 内存泄漏 :又叫 “ 存储泄漏 ”,对象不会再被程序使用了,但是 GC 又不能回收它们。例如:IO 流不适用了但是没有被 Close、

    2024年02月19日
    浏览(13)
  • 「JVM」Full GC和Minor GC、Major GC

    Full GC (Full Garbage Collection)是Java虚拟机(JVM)中的一种垃圾回收操作。它是指对整个堆内存进行回收,包括新生代和老年代。 在Java中,垃圾回收器通常会将 堆内存划分 为不同的区域,如 新生代和老年代 。当新生代空间不足时,会触发 Minor GC ,只清理新生代内存。而当老

    2024年02月15日
    浏览(13)
  • 【JVM】JVM垃圾回收GC相关参数说明

    -XX:+PrintCommandLineFlags : 输出JVM启动参数 -XX:+UseSerialGC :在新生代和老年代使用串行收集器 -XX:SurvivorRatio :设置eden区大小和survivior区大小的比例 -XX:NewRatio :新生代和老年代的比 -XX:+UseParNewGC :在新生代使用并行收集器 -XX:+UseParallelGC :新生代使用并行回收收集器 -XX:+UseParallelO

    2024年02月04日
    浏览(30)
  • JVM GC配置指南

    本文旨在简明扼要说明各回收器调优参数,如有疏漏欢迎指正。 1、JDK版本 以下所有优化全部基于JDK8版本,强烈建议低版本升级到JDK8,并尽可能使用update_191以后版本。 2、如何选择垃圾回收器 响应优先应用:面向C端对响应时间敏感的应用,堆内存8G以上建议选择G1,堆内存

    2024年02月15日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包