记录一次线上fullgc问题排查过程

某天,接到测试部门反馈说线上项目突然很快,由于当前版本代码和上一版本相比就多了一个刚上线了一个5分钟1次的跑批任务,先关闭次任务后观察是否卡顿,并检查堆内存是否使用完造成频繁gc

1.通过jmap命令查看堆内存中的对象

2.生成当前堆快照文件并用mat工具打开(file->HeapDump)

导出命令如下:

 ./jmap -dump:format=b,file=heap.dump 3920149

发现是有一个任务线程创建了最多的对象,调整对应配置如下核心线程从1个改5个线程

3.查看堆内存设置情况:

 ./jhsdb jmap --heap --pid  7853

返回说明:

  1. MinHeapFreeRatio:最小堆空闲比例,表示堆中空闲空间的最小比例。默认值为40,表示堆中至少有40%的空间是空闲的。

  2. MaxHeapFreeRatio:最大堆空闲比例,表示堆中空闲空间的最大比例。默认值为70,表示堆中最多可以有70%的空间是空闲的。

  3. MaxHeapSize:最大堆大小,表示堆的最大可用空间。

  4. NewSize:新生代大小,表示新生代的初始大小。

  5. MaxNewSize:最大新生代大小,表示新生代的最大可用空间。

  6. OldSize:老年代大小,表示老年代的初始大小。

  7. NewRatio:新生代与老年代的比例,表示新生代与老年代的大小比例默认为2。

  8. SurvivorRatio:幸存者区与Eden区的比例,表示幸存者区与Eden区的大小比例。默认值为8,表示幸存者区的大小是Eden区大小的1/8。

  9. MetaspaceSize:元数据区大小,表示元数据区的初始大小。

  10. CompressedClassSpaceSize:压缩类空间大小,表示压缩类空间的初始大小。

  11. MaxMetaspaceSize:最大元数据区大小,表示元数据区的最大可用空间。

  12. G1HeapRegionSize:G1堆区域大小,表示G1堆区域的大小

堆分为新生代和老年代 默认占比 1:2, 可以看到老年代占用使用过高,调整其大小,调整为3 使用参数为:

-XX:NewRatio=3

新生代分为eden区、From Survivor(S0区)、To Survivor(S1区) 默认占比8:1:1,,可以看的s区100%,调整为6

-XX:SurvivorRatio=6

其他调整为:

 -Xmx8192M 最大堆内存调整为8192M
-XX:MetaspaceSize=256M 设置元数据区初始值256M
-XX:MaxMetaspaceSize=512M 设置元数据区最大值256M
-XX:MaxDirectMemorySize=256M 设置堆外内存256M
-XX:PretenureSizeThreshold=11457280 设置对象超过11457280 字节直接进入老年代
-XX:MaxTenuringThreshold=15 设置垃圾最大年龄15 超过这个就进入老年代
-XX:+HeapDumpOnOutOfMemoryError 打印OOM
-XX:HeapDumpPath=./logs/dump.hprof dump文件

4.调整后重启观察gc情况发现明显好转从600多次fgc到12次fgc,而且12次均为启动时就触发

./jstat -gcutil 7853 5000 5

返回说明:

  • S0:Survivor 0区的使用率,表示Survivor 0区已使用的百分比。
  • S1:Survivor 1区的使用率,表示Survivor 1区已使用的百分比。
  • E:Eden区的使用率,表示Eden区已使用的百分比。
  • O:老年代的使用率,表示老年代已使用的百分比。
  • M:元数据区的使用率,表示元数据区已使用的百分比。
  • CCS:压缩类空间的使用率,表示压缩类空间已使用的百分比。
  • YGC:Young Generation垃圾回收的次数,表示Young Generation垃圾回收的次数。
  • YGCT:Young Generation垃圾回收的总时间,表示Young Generation垃圾回收的总时间。
  • FGC:Full GC的次数,表示Full GC的次数。
  • FGCT:Full GC的总时间,表示Full GC的总时间。
  • CGC:Concurrent Mode Failure的次数,表示Concurrent Mode Failure的次数。
  • CGCT:Concurrent Mode Failure的总时间,表示Concurrent Mode Failure的总时间。
  • GCT:垃圾回收的总时间,表示垃圾回收的总时间。

参数解析

5.打印gc.log定位增加参数

 -XX:+PrintGCDetails  -Xloggc:./logs/gc.log

发现如下日志:

6.定位system.gc的具体位置

下载 https://arthas.aliyun.com/arthas-boot.jar

启动后选择本地项目如下:

访问arthas 的web界面

可以发现是由于项目中引入领英的paldb的问题要如何解决呢?

方法1:

-XX:+DisableExplicitGC

该参数将使JVM完全忽略系统的GC调用(不管使用的收集器是什么类型),国产欧拉系统设置了不生效,cenos机器设置正常

方法2:

-XX:+ExplicitGCInvokesConcurrent

该参数启用后JVM无论什么时候调用系统GC,都执行CMS GC,而不是Full GC。

7.再次观察gc

至此卡顿问题解决!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/132053.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

淘宝商品评论数据接口,淘宝商品评论API接口

淘宝商品评论数据接口可以通过淘宝开放平台API获取。 通过构建合理的请求URL,可以向淘宝服务器发起HTTP请求,获取商品评论数据。接口返回的数据一般为JSON格式,包含了商品的各种评价信息。获取到商品评论数据后,可以对其进行处理…

如何使用数字化系统赋能企业营销?数字化系统对于企业的作用?

数字化系统对于企业的营销活动能够提供多方面的帮助。 1. 数字化系统可以帮助企业更精准地了解客户的需求和行为,从而更好地定位产品和服务。如蚓链数字化营销系统可以通过数据分析和挖掘,帮助企业深入了解客户群体的特点和喜好,进而调整企业…

Gnuradio+AM解调

1. https://wiki.gnuradio.org/index.php/PLL_Carrier_Tracking 2. https://wiki.gnuradio.org/index.php?titleComplex_to_Mag#Example_Flowgraph

使用vue3+element-ui plus 快速构建后台管理模板

一、安装 vue3 脚手架 npm create vuelatestcd vue-ui-template #切换到刚刚创建好的vue项目根目录中 npm install #下载项目所需要的依赖包 npm run dev #启动运行项目服务项目启动后,默认页面显示如下: 二、安装element-ui plus 官网链接:…

C++ (Chapter 1)

C (一) 1.C的命名空间 先来看一个C语言的例子: 下面这段代码是可以正常运行的. #include<stdio.h> int rand 0; int main() {printf("%d \n", rand);return 0; }但是,包含了一个头文件之后,甚至无法通过编译. #include<stdio.h> #include<stdli…

Maven下载与文件配置

文章目录 官网下载相应文件修改配置文件设置环境变量 官网下载相应文件 https://maven.apache.org/ 点击Download ,找到Files 下载好了&#xff0c;请解压&#xff0c;放在你需要存储的位置&#xff01; 修改配置文件 打开解压的文件&#xff1a; 在conf 下有一个setting…

TensorFlow案例学习:对服装图像进行分类

前言 官方为我们提供了一个 对服装图像进行分类 的案例&#xff0c;方便我们快速学习 建议按顺序观看&#xff0c;这是一个小系列&#xff0c;适合像我这样的初学者入门 配置环境&#xff1a;windows环境下tensorflow安装 图片分类案例学习&#xff1a;TensorFlow案例学习&…

沪深300期权一个点多少钱?

经中国证监会批准&#xff0c;深圳证券交易所于2019年12月23日上市嘉实沪深300ETF期权合约品种。该产品是以沪深300为标的物的嘉实沪深300ETF交易型指数基金为标的衍生的标准化合约&#xff0c;下文介绍沪深300期权一个点多少钱?本文来自&#xff1a;期权酱 一、沪深300期权涨…

推荐几个技术学习的网站

USB中文网 点击打开 USB中文网 - USB技术开发交流USB中文网是国内领先的专业USB技术网站&#xff0c;提供USB开发入门教程&#xff0c;USB设备开发&#xff0c;USB驱动开发&#xff0c;USB摄像头&#xff0c;USB麦克风&#xff0c;USB存储设备&#xff0c;USB-HID设备&#x…

华为认证 | HCIP-Datacom,这门认证正式发布新版本!

华为认证数通高级工程师HCIP-Datacom-Campus Network Planning and Deployment V1.5&#xff08;中文版&#xff09;自2023年9月28日起&#xff0c;正式在中国区发布。 01 发布概述 基于“平台生态”战略&#xff0c;围绕“云-管-端”协同的新ICT技术架构&#xff0c;华为公司…

随着 ChatGPT 凭借 GPT-4V(ision) 获得关注,多模态 AI 不断发展

原创 | 文 BFT机器人 在不断努力让人工智能更像人类的过程中&#xff0c;OpenAI的GPT模型不断突破界限GPT-4现在能够接受文本和图像的提示。 生成式人工智能中的多模态表示模型根据输入生成文本、图像或音频等各种输出的能力。这些模型经过特定数据的训练&#xff0c;学习底层模…

Vega Prime入门教程14.04:CDB测试

本文首发于&#xff1a;Vega Prime入门教程14.04&#xff1a;CDB测试 打开失败 打开vpcdb_yemen_urban.acf 会报错 点击确定后会显示默认界面 这个白天蓝海应该是默认场景。 开启服务 打开LP&#xff0c;点击菜单栏或者工具栏 显示管理界面 切换至rtp界面 点击Start RTP按…