java fgc_记一次频繁FGC的简单排查

java fgc_记一次频繁FGC的简单排查简书占小狼转载请注明原创出处,谢谢!如果读完觉得有收获的话,欢迎点赞加关注周末愉快,今天有时间记录一下上周遇到的一个问题,学习的脚步不能放慢,也不敢放慢。存在问题在线上环境进行服务压测,压测完成后,cpu使用率居高不下,很是费解,按理说已经没有压测请求了,这时消耗cpu资源的只有GC线程了,可以通过jstat命令查看一下JVM的GC情况,然后就碰到了诡异的GC问题。jstat命令jstat[…

大家好,又见面了,我是你们的朋友全栈君。

简书 占小狼

转载请注明原创出处,谢谢!

如果读完觉得有收获的话,欢迎点赞加关注

周末愉快,今天有时间记录一下上周遇到的一个问题,学习的脚步不能放慢,也不敢放慢。

2304f0ba412d

存在问题

在线上环境进行服务压测,压测完成后,cpu使用率居高不下,很是费解,按理说已经没有压测请求了,这时消耗cpu资源的只有GC线程了,可以通过jstat命令查看一下JVM的GC情况,然后就碰到了诡异的GC问题。

jstat命令

jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]

参数:

generalOption: 一般使用-gcutil查看GC情况

vmid: 虚拟机进程号,即当前运行的java进程号

interval: 间隔时间,单位为秒或毫秒

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

执行jstat -gcutil 9132 1000命令,线上服务器的GC情况如下:

2304f0ba412d

参数说明如下:

S0: 新生代中Survivor space 0区已使用空间的百分比

S1: 新生代中Survivor space 1区已使用空间的百分比

E: 新生代已使用空间的百分比

O: 老年代已使用空间的百分比

P: 永久带已使用空间的百分比

YGC: 从应用程序启动到当前,发生Yang GC 的次数

YGCT: 从应用程序启动到当前,Yang GC所用的时间【单位秒】

FGC: 从应用程序启动到当前,发生Full GC的次数

FGCT: 从应用程序启动到当前,Full GC所用的时间

GCT: 从应用程序启动到当前,用于垃圾回收的总时间【单位秒】

问题分析

通过打印的GC数据可以看出,JVM一直在进行FGC(cms gc),不过老年代的使用率反而没有下降,一直稳定在60.16%,对这一情况很疑惑,几乎每次都重现,后来去仔细查看了JVM的启动参数,发现其中CMSInitiatingOcupancyFraction参数,被设置成60,意味着当老年代的使用率达到阈值60%时会触发FGC,但是FGC之后,老年代的使用率还是大于60%,所以会不断的进行FGC,建议这个值不要设置的这么小。

至于为什么FGC之后,老年代的使用率没有下降,可以通过dump查看到底是哪些存活对象在作怪,在进行FGC时,通常会伴随着一次YGC,但这也不是一定的,如果执行YGC之后没有明显效果的话,会设置一个变量,表明下次不用进行YGC,所以如果老年代如果存在大量对象的GC ROOT在新生代的话,这些对象就不会被回收,这种情况必须强制执行一次YGC之后,才有可能回收这些老年代的对象,比如添加参数-XX:+CMSScavengeBeforeRemark,就可以解这个问题。

昨天正好笨神也遇到类似的问题,并写一篇文章《又抓了一个导致频繁GC的鬼–数组动态扩容》进行分析,可以参考一下。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150785.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 修改apache服务器端口号_apache修改端口号

    修改apache服务器端口号_apache修改端口号一、修改/etc/httpd/conf/httpd.conf文件中的监听端口号Listen80把80修改成需要的号,如8000,即Listen8000二、查看SELinux下http相关端口#semanageport-l|grephttphttp_cache_port_ttcp3128,8080,8118,10001-10010http_cache_po

    2022年9月14日
    0
  • Android TextView行间距解析

    Android TextView行间距解析介绍Android中TextView的行间距设置方法,并分析每项设置对间距的影响。

    2022年10月25日
    0
  • 自定义url是什么意思_application.getbean

    自定义url是什么意思_application.getbeanSpringBoot简洁工程生成:https://start.spring.io/默认生成样式:@SpringBootApplicationpublicclassSpringParentApplication{publicstaticvoidmain(String[]args){SpringApplicatio…

    2022年9月10日
    0
  • CCS软件下载安装教程

    CCS软件下载安装教程关于CCSCCS是CodeComposerStudio的缩写。是美国德州仪器公司推出的代码开发和调试软件。单片机设计会经常用到这个软件。文章目录CCS软件下载安装教程1.下载1.1主要步骤2.安装1.下载CCS是一款免费的软件。可以去官网下载:http://www.ti.com.cn/tool/cn/CCSTUDIO1.1主要步骤登录网页成功后,出现如下界面:如果觉得英文看着不适应,可以在右上角更改网页语言为“简体中文”。注册TI新用户,如实填写各项信

    2022年4月6日
    440
  • Codeforces Round #264 (Div. 2) C Gargari and Bishops 【暴力】

    Codeforces Round #264 (Div. 2) C Gargari and Bishops 【暴力】

    2022年1月15日
    50
  • 2020年公认最快的dns_2021最快最稳定的dns排行

    2020年公认最快的dns_2021最快最稳定的dns排行简介:2020国内速度最快的dns推荐原版周公解梦分析梦见儿子死了的吉凶境遇安全,推荐长辈惠泽,推荐承受父祖之余德,前辈之提拔,而得大成功及发展,原命若喜水木者更佳。若凶数者:成又转败,陷于离乱变动,至晚年终归孤独失败,又早年有落水灾遇,生涯九死一生之命格。国内又须戒色变及刀杀之危。梦到蛇和蛇一头,速度暗示你可能会受到别人的欺骗,或受到别人欺骗。最快梦见蛇的心理学解梦从做梦内容的本义来说:推荐动物…

    2022年9月4日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号