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

news2024/11/16 7:48:46

某天,接到测试部门反馈说线上项目突然很快,由于当前版本代码和上一版本相比就多了一个刚上线了一个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.coloradmin.cn/o/1083622.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决:uniapp项目中调用小程序的chooseAddress() API失效

目录 问题描述 解决方案 问题描述 使用 Hbuilder X 编辑器和 uni-app 框架开发小程序项目,在调用小程序提供的 uni.chooseAddress() API实现选择收货地址的功能时,点击选择收货地址没有反应,获取不到用户收货地址,API失效了 …

【python获取.doc内表格指定单元格数据】

python获取.doc内表格指定单元格数据 需求说明代码部分 需求说明 读取.doc内表格中指定数据并以对象形式输出 1、获取第一张表内:部门编码、物料编码、退库数量(数字型)、物料质量问题描述、物料来源、填写人数据 2、获取第二张表格内:采购人员ID案例表…

简单列举客户关系管理系统的核心功能

CRM客户关系管理系统能够帮助企业收集、管理、维护客户信息,轻松跟进客户全过程,提供高质量的客户服务,通过数据分析为管理数据赋能。CRM系统能够让企业以客户为中心,实现全维度管理。那么,CRM系统的核心功能有哪些&am…

如何实现全网采集

品牌在控价过程中,需要对产品链接的价格进行监测,监测就要先做采集,采集完成后,再对数据进行促销信息的汇总计算,得出到手价,输出低价报表,从过程中可以看出,采集是非常关键的一步&a…

简单理解JS回调函数(callback)

一、回调函数到底是什么? 其实回调函数(没有调用也会执行)就是一个参数,把这个参数传到另一个函数里面,也就是主函数里面,当主函数里面的事情干完再回头去执行当做参数传进去的回调函数,回头去调…

Kelper.js 笔记 python交互

1 加载Kepler 地图 KeplerGl() 1.1 主要参数 height 可选 默认值:400 地图显示的高度 data 数据集 字典,键是数据集的名称 config地图配置字典 1.2 举例 from keplergl import KeplerGlmap_KeplerGl() map_ 默认的位置 1.3 添加自己的图 1.3.1 读…

关键词搜索苏宁商品列表数据,苏宁商品列表数据接口,苏宁API接口

在网页抓取方面,可以使用 Python、Java 等编程语言编写程序,通过模拟 HTTP 请求,获取苏宁网站上的商品页面。在数据提取方面,可以使用正则表达式、XPath 等方式从 HTML 代码中提取出有用的信息。值得注意的是,苏宁网站…

试过GPT-4V后,微软写了个166页的测评报告,业内人士:高级用户必读

一周之前,ChatGPT迎来重大更新,不管是 GPT-4 还是 GPT-3.5 模型,都可以基于图像进行分析和对话。与之对应的,多模态版GPT-4V模型相关文档也一并放出。当时 OpenAI 放出的文档只有18页,很多内容都无从得知,对…

作战仿真试验理论体系研究

源自:装甲兵工程学院学报 作者:徐享忠,杨建东,郭齐胜 “人工智能技术与咨询” 发布 摘要 建立了作战仿真试验的概念框架,以预测论、作战仿真理论和试验理论为基础理论,以仿真试验目标、仿真试验模式、…

Java基于SpringBoot+Vue的汽车租赁系统

1 简介 致远汽车租赁管理方面的任务繁琐,以至于公司每年都在致远汽车租赁管理这方面投入较多的精力却效果甚微,致远汽车租赁系统的目标就是为了能够缓解致远汽车租赁管理工作方面面临的压力,让致远汽车租赁管理方面的工作变得更加高效准确。 文章首发地址 2 技术栈 开发语言…

Kubernetes核心组件Services

1. Kubernetes Service概念 Service是kubernetes最核心的概念,通过创建Service,可以为一组具有相同功能的POD(容器)应用提供统一的访问入口,并且将请求进行负载分发到后端的各个容器应用上。 在Kubernetes中&#xf…

vue项目打包后使用reverse-sourcemap反编译到源码(详解版)

首先得说一下,vue项目中productionSourceMap这个属性。该属性对应的值为true|false。 当productionSourceMap: true,时:   1、打包后能看到xxxx.js.map文件,map文件够通过反编译看到源码;   2、打包后会导致文件变大(因为多了很多map文件导致的)&…

智慧政务大屏建设方案

智慧政务大屏建设方案是为政府部门提供信息化展示和决策支持的重要工具。下面将提供一个详细的智慧政务大屏建设方案,包括硬件设备、软件平台和功能模块等。 **一、硬件设备** 智慧政务大屏的硬件设备需要满足以下基本要求: 1. 显示屏:选择…

网页游戏的开发流程

网页游戏的开发流程可以根据项目的规模和复杂性而有所不同,但通常包括以下一般步骤,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.需求分析: 确定游戏的概念、目标受众和核…

关于信息安全软考的记录5

1、防火墙的概念 为了应对网络威胁,联网的机构或公司将自己的网络与公共的不可信任的网络进行隔离。 网络的安全信息程度和需要保护的对象,人为地划分若干安全区域,这些安全区域有: 公共外部网络,如Intrenet内联网&…

华为云云耀云服务器L实例评测|华为云耀云服务器L实例评测包管理工具安装软件(六)

七、华为云耀云服务器L实例评测包管理工具安装软件: 根据企业级项目架构图所示,本章主要是安装公司企业项目的基本环境LNMP,相关的包管理器Composer、Node、Npm、Yarn安装,评测一下包管理工具安装软件是否存在问题,如果…

【Tomcat】Apache发布两个新版本Tomcat修复多个Bug

Apache 官网发布了两个最新的 Tomcat 版本包,分别是:8.5.94、9.0.81 这两个最新版本修复了多个漏洞,统计信息如下表所示。有关漏洞的详细信息,请查阅官方相关文档(见:参考)。 严重等级漏洞说明…

Premiere Elements 2024(PR简化版)直装版

Adobe Premiere Elements 2024 是一款由Adobe Systems推出的视频编辑软件,它结合了易用性和专业级的功能,帮助用户对视频进行剪辑、特效、色彩校正等处理。 主要功能和特点: 导入和组织视频:Premiere Elements 2024允许用户快速导…

安装CentOS7.9操作系统

下面是安装CentOS7.9操作系统的步骤: 下载CentOS7.9镜像文件,可以到CentOS官网或者其他镜像站点下载。 创建一个可用的安装媒介,可以使用USB或者DVD。 插入安装媒介,启动计算机,进入BIOS设置,选择从外部设…

数据仓库Hive(林子雨课程慕课)

文章目录 9.数据仓库Hive9.1 数据仓库的概念9.2 Hive简介9.3 SQL语句转换为MapReduce作业的基本原理9.4 Impla9.4.1 Impala简介9.4.2 Impala系统架构9.4.3 Impala查询执行过程9.4.4 Impala与Hive的比较 9.5 Hive的安装和基本操作9.5.1 Hive安装9.5.2 Hive基本操作 9.数据仓库Hi…