简书 占小狼

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

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

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

存在问题

在线上环境进行服务压测,压测完成后,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情况如下:

参数说明如下:

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的鬼--数组动态扩容》进行分析,可以参考一下。

java fgc_记一次频繁FGC的简单排查相关推荐

  1. 记一次频繁YoungGC生产问题排查思路及解决方案

    1.问题背景 系统开发了新功能上线,本来上完之后功能验收正常,就在大家都松了一口气安心听技术分享时,晚上6.56分突然收到了系统告警: YoungGC时间过长,说实话一开始看到这个告警心里是毫无波澜的 ...

  2. fgc java,频繁FGC的真凶原来是它

    频繁FGC的真凶原来是它 上周排查了一个线上问题,主要现象是CPU占用过高,jvm old区占用过高,同时频繁fgc,我简单排查了下就草草收场了,但是过后我对这个问题又进行了复查,发现问题没有那么简单 ...

  3. java fgc时间过长_性能案例分析 | 一个频繁fgc问题

    今天分享一个频繁fgc的问题,现象是接口响应时间太长了,达到了好几秒,远远高于预期的1秒. 01.监控 xshell连接到应用服务器,服务器负载高,且cpu使用率也偏高 使用jstat看了下gc的情况 ...

  4. 又发生频繁FGC,这次是谁的锅

    转载自  又发生频繁FGC,这次是谁的锅 这是笨神JVMPocket群里一位名为"云何*住"的同学提出来的问题,问题现象是CPU飙高并且频繁FullGC. 重现问题 这位同学的业务 ...

  5. JDK的bug导致Java文件删除不了,必须fgc

    项目中有很多文件删除的代码写的很奇怪. while(!file.delete())Thread.sleep(1000); 还有 System.gc(); file.delete(); 这个System ...

  6. java - JVM 线上服务的FGC问题排查

    线上服务的GC问题,是Java程序非常典型的一类问题,非常考验工程师排查问题的能力.同时,几乎是面试必考题,但是能真正答好此题的人并不多,要么原理没吃透,要么缺乏实战经验. 过去半年时间里,我们的广告 ...

  7. 性能测试中你是否遇见过频繁fgc的问题呢?

    前言:今天分享一个频繁fgc的问题,现象是接口响应时间太长了,达到了好几秒,远远高于预期的1秒. xshell连接到应用服务器,服务器负载高,且cpu使用率也偏高. 使用jstat看了下gc的情况,f ...

  8. 记一次服务器负载飙高排查过程

    记一次服务器负载飙高排查过程 问题描述 在前天呢,我们公司的三台部署着php项目的线上服务器A.B.C,其中一台服务器A出现了CPU负载飙高,与其他两台服务器相差好几倍,并且在前天之前都没有出现过这么 ...

  9. 转:记一次linux oom内存溢出排查过程

    @转:记一次linux oom内存溢出排查过程 记一次linux oom内存溢出排查过程 2018年08月16日 14:13:49 enchanterblue 阅读数 4099更多 分类专栏: --- ...

最新文章

  1. c语言 字母 八进制表示'/1011',C语言C语言第一课:C语言概述为什么学习C语言怎样学习C语言.DOC...
  2. 由4G向5G进发的物联网:NB-IoT与LTE-M
  3. cannot import name 'etree' from 'lxml'
  4. mysql调用jieba库_jieba库的使用及实例
  5. A__Java为数据结构提供的实用包的运用(减少代码量)---更新中ing
  6. (第二课)python学习之数据类型
  7. 表的插入、更新、删除、合并操作_10_仅复制表结构
  8. php发送验证图片,php生成图片验证码_PHP教程
  9. ArcGIS实验教程——实验三十四:ArcGIS地统计分析全解(直方图、正态QQ图、趋势分析、voronoi图、半变异函数、协方差云)
  10. mysql 主主+keepalive
  11. 一加闷声发大财 成为今年第一季度全球高端手机市场前四
  12. 操作系统中的hosts文件
  13. Apache RewriteCond on HTTP_COOKIE
  14. 从零开始学WEB前端——HTML理论讲解
  15. 有关于fprintf()函数的用法
  16. 101. 熟悉 Java 并发吗,谈谈对 JUC 线程池 ThreadPoolExecutor 的认识吧
  17. Ubuntu20.10系统FreeCAD 0.19编译安装
  18. Python解题 - NOIP2005 青蛙过河
  19. 最优化:一维搜索的Wolfe条件与Goldstein条件
  20. android ios 重力感应器,iOS实时获取当前的屏幕方向之重力感应

热门文章

  1. awk sed精选命令应用集_2018_lcf
  2. 有趣的微分方程之常数变易法
  3. 【教程】如何用龙门代理公布器刷淘宝拍拍流量
  4. 做营销,运营网站,讲的是啥“说服力”?
  5. nwjs 实现桌面化 app
  6. 详解CAN总线:CAN总线报文格式—数据帧
  7. html块级元素h1,div、h1 或 p 元素常常被称为块级元素
  8. Problem M. Mediocre String Problem
  9. Acwing---1246. 等差数列
  10. pingpangchat_国外收款用PingPong,省心又省钱,Amazon和Google AdSense都可收