一次线上服务fullGC原因排查

纯干货:线上出现fullGC次数很多的排查思路以及实践总结 最近线上发布了一个版本,导致full gc次数忽然就上去了,虽然对线上业务造成的影响还不是很大,但是为了以防万一还是对这个问题做了相关排查。 GC命令排查 一开始还是从堆的变化开始: # 查看每秒的堆发生的变化以及gc的次数 jstat -gcutil pid 1000 相关参数: s0 : Heap上的 Survivor space 0 区已使用空间的百分比 s1 : Heap上的 S... 阅读详情


一、现象
早上九点多又收到了fullGC次数过高的应用监控告警{P1}{故障}JVM Old GC all(#3) full_gc_count  >5}{当前值:28},通过公司使用的监控平台可以观察到服务器在这个时间段内确实出现了一些异常情况:

1.负载突然增加

2.fullgc频率显著增加,每次时间渐渐增长

3.老年代内存使用率增长很快(大量对象直接进入老年带),可以看到Survivor区一直被打满(Survivor功效丧失,大量新生代对象不能及时回收越过Survivor直接进入年老代)




二、工具排查

线上日志dump

使用jmap -dump:live,format=b,file=xxx [pid]

工具介绍

市面上提供了很多种工具比如visualVM、JMAT、Jprofile和ha等工具,都可以进行内存堆快照文件分析

1、Jprofile

使用Jprofile需要先将文件后缀修改为hprof,用Jprofile可以一目了然的看出是大量对象,而且可以看到具体的方法一级classloader信息


2、ha

使用ha工具需要将dump文件后缀修改为jvmdump结尾,通过ha.jar工具查看可以看到大对象数量为66万多和38万多,分别占用了300多兆和65多兆堆内存


3、JMAT

JMAT也是很好用的工具,建议安装了eclipse的使用

4、visualVM

这里不建议用visualVM分析,一个需要设置出展示具体的方法或者对象(没研究出来),而且默认的内存空间比较小,要看大对象需要修改参数
经过试验后,对于dump文件分析最好是用Jprofile或者ibm出的ha.jar这个工具或者进行分析效果较好
 

三、排查结果分析

1、分析结果验证

根据工具分析结果,对照着监控中的异常可以看到9点11分时候三次long-SQL中查询返回了大量对象发现结果和时间都是吻合的,于是进一步排查代码

2、代码排查

排查过程中发现项目中并没有类似分类服务调用及SQL查询,是由于依赖的jar包中的方法有查询数据库,用的是本地缓存的形式,有个定时器类会从lion配置定时读取信息,
缓存过期时间设置的是3600000s,
查到原因这个服务没有人重新发布部署过,所以经过四十一天后缓存过期后,再初始化缓存时会重新读数据库获取所有分类和城市的数据,两次查询分别获取了六十多万分类与城市对应关系的对象,由于数量多,申请堆空间过大,所以大量对象直接进入了老年代,触发了fullGC
 

四、解决

这个方法是老的架构组件中方法并且已经很久没人维护,后续这类商区服务的实现方式需要重构,去掉了本地缓存和直接读取数据库的方法,改为分页调用不是直接查缓存
一次线上JVM调优实践,FullGC40次/天到10天一次的优化过程 对于JVM垃圾回收,之前一直都是处于理论阶段,就知道新生代,老年代的晋升关系,这些知识仅够应付面试使用的。前一段时间,线上服务器的FullGC非常频繁,平均一天40多次,而且隔几天就有服务器自动重启了,这表明的服务器的状态已经非常不正常了,得到这么好的机会,当然要主动请求进行调优了。未调优前的服务器GC数据,FullGC非常频繁。 首先服务器的配置非常一般(2核4G),总共4台服务器集群。每... 阅读详情

相关推荐

记一次频繁fullgc排查到解决全流程复盘

阿里云oss文件上传导致的频繁fullgc问题排查到解决全流程复盘

zhang09090606的博客 5592

full gc排查思路

清楚排查问题时能使用哪些工具 公司的监控系统:大部分公司都会有,可全方位监控JVM的各项指标。 JDK的自带工具,包括jmap、jstat等常用命令: 查看堆内存各区域的使用率以及GC情况 jstat -gcutil -h20 pid 1000 查看堆内存中的存活对象,并按空间排序 jmap -histo pid | head -n20 dump堆内存文件 jmap -dump:format=b,file=heap pid ...

山楂片的博客 4346

一次频繁Full GC的排查过程

问题描述最近公司的线上监控系统给我推送了一些kafka lag持续增长的消息,我上生产环境去看了相应的consumer的情况,发现几台机器虽然还在处理消息,但是速度明显慢了很多。问题猜测与验证我猜测是JVM频繁做Full GC,导致进程也跟着频繁卡顿,处理消息的速度自然就慢了。为了验证这个想法,先用jstat看看内存使用情况: jstat -gcutil 1 1000 #1是进程号 结果如我所

沈鸿斌的博客 1万+

如何分析JVM的full gc问题

分析Full GC问题是优化Java应用性能的重要环节。Full GC(Full Garbage Collection)是指对整个堆内存(包括新生代和老年代)进行垃圾回收,通常伴随着较长的停顿时间。

weixin_39304656的博客 3350

jca.jar ha.jar ga.jar

IBM提供的线程、内存、GC日志分析工具。提供可视化界面,分析javacore、heapdump、GC等文件,为我们分析内存、线程等令人头疼的问题,提供有效的手段。

ha457.jar 一个jump分析

ha457jar一个jump分析,分析堆内存问题,可以看出哪个类占用比例高的问题

Full GC分析:设置Java VM参数实现在Full GC前后自动生成Dump

本文讲解了如何设置Java VM参数实现在Full GC前后自动生成Dump。共有三个VM参数需要设置: HeapDumpBeforeFullGC 实现在Full GC前dump。 HeapDumpBeforeFullGC 实现在Full GC后dump。 HeapDumpPath 设置Dump保存的路径 设置这些参数的方法,这里总结了四种,大家可以根据情...

jeff_fangji的专栏 2万+

战舰V3移植CANopenNode并驱动电机全流程

第三部分是电机的对象字典(也就是节点的OD)中的索引,长度2个字节。索引发送的是小段模式,比如这一部分为0X40 0X60,实际操作的索引地址为0X6040。第一部分是COB-ID,长度1个字节,电机的node-ID默认为0x01,所以报文ID一直是601。第五部分是要写入的数据,数据发送的时候是小端模式,低字节数据先发送,长度由第二部分决定。配置定时器6,时间为1ms,根据公式计算得到参数PSC取72-1,ARR取1000-1。第二部分是CMD,长度1个字节,其实就是数据部分的长度,

qq_50526837的博客 3051

java gc时自动收dump_Full GC分析:设置Java VM参数实现在Full GC前后自动生成Dump

本文讲解了如何设置Java VM参数实现在Full GC前后自动生成Dump。共有三个VM参数需要设置:HeapDumpBeforeFullGC 实现在Full GC前dump。HeapDumpBeforeFullGC 实现在Full GC后dump。HeapDumpPath 设置Dump保存的路径设置这些参数的方法,这里总结了四种,大家可以根据情况选择使用。方法1:启...

weixin_35752233的博客 2381

Ubuntu+Dify实战:如何让大模型知识库完美支持图片召回(附避坑指南)

本文详细介绍了在Ubuntu系统上部署Dify平台,并实现大模型知识库图片召回功能的完整实战方案。通过解析Dify处理图片的底层逻辑,重点讲解了配置Nginx代理服务器将本地图片路径转换为可公开访问URL的核心工程步骤,并提供了文档预处理、环境变量配置以及父子分段策略等高级技巧,帮助开发者构建图文并茂的AI应用,有效提升知识库的丰富性和用户体验。

c7d8e的博客 447

华为OD机试真题 新系统2026-04-01 Python&JS 实现【空间占用计算】

员工A的磁盘空间经常被耗尽,他需要找到占用空间最大的目录或文件,然后决定如何清理文件释放空间。给定某一目录,请编写程序帮助他统计该目录内一级子目录和文件的占用空间,并返回目标目录一级子项(文件或子目录)中占用空间最大的项。

MISAYAONE的博客 1316

fullgc多久一次正常_线上JVM调优实践,FullGC40次/天到10天一次的优化

对于JVM垃圾回收,之前一直都是处于理论阶段,就知道新生代,老年代的晋升关系,这些知识仅够应付面试使用的。前一段时间,线上服务器的FullGC非常频繁,平均一天40多次,而且隔几天就有服务器自动重启了,这表明的服务器的状态已经非常不正常了,得到这么好的机会,当然要主动请求进行调优了。未调优前的服务器GC数据,FullGC非常频繁。首先服务器的配置非常一般(2核4G),总共4台服务器集群。每台服务器...

weixin_39783915的博客 622

【无人机路径规划】基于强化学习实现多无人机路径规划附matlab代码

1 简介 本文提出一种基于强化学习实现多无人机路径规划。​ 2 部分代码 % This is used to measure the path length, service rate and risk explosure for each UAVs %% parameters function [PL,ServiceRate,Risk]=measure global N2; % divide [0,1]*[0,1] map into N2*N2 grid when calcul

qq_59747472的博客 6908

【转】又一次线上 OOM 排查经过

又一次线上OOM排查经过 最近线上一个服务又出现了频繁Full GC的情况,导致提供的业务经常超时。问题出现非常不稳定,经过两周的时候,终于又捕捉到了一次Full GC,于是联系运维做Heap Dump之后,经过一系列分析,终于解决问题。这次的问题稍微复杂一点,但是也比较有代表性,用到了VisualVM和MAT两个工具,继续记录如下。 现象 这次使用公司的CAT监控平台看到的内存表现如...

weixin_34146805的博客 107

go实现MQTT broker(附完整源码)

go实现MQTT broker(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 578

【人工智能】Claude Code 安装、配置及问题排查完整指南

建议使用IDE来启动 Claude,执行后,内容如下。(确保环境可正常运行 npm 命令)。

奶爸的编程之路,也就一周冷个三天 1215

CPU突然飙升到300%,Dubbo活动线程数直接飙到1000

转:https://mp.weixin.qq.com/s/-lSiVDfqYrKk_w-xitYBhA 背景:新功能开发测试完成后,准备发布上线,当发布完第三台机器时,监控显示其中一台机器CPU突然飙升到300%,Dubbo活动线程数直接飙到1000+,不得不停止发布,立马回滚出问题的机器,回滚之后恢复正常;继续观察另外两台已经发布的机器,最终,无一幸免,只能全部回滚了。 下面是我的故障排查过...

weixin_30664539的博客 216

1、电路分析知识全解析:从基础到实践应用

本博客全面解析电路分析知识体系,涵盖从基础的电压、电流、电阻概念到复杂的交流电路、瞬态分析和高级应用如滤波器与变压器等内容。适合电子技术专业学生和技术爱好者学习,提供详细的知识结构、学习路径、实践示例以及丰富的学习资源,包括计算机模拟工具Multisim和PSpice的使用指导。通过理论与实践结合,帮助学习者掌握电路分析的核心技能,为电子工程和电力系统等相关领域打下坚实基础。

iii12的专栏 159

记录一次线上服务发生FullGC的原因

记录一次线上服务发生FullGC的原因,并模拟真实案例进行分析和验证。

sinat_37914371的博客 1355

【异常】安装OpenClaw遇到 Windows环境pnpm安装node-llama-cpp postinstall生命周期脚本执行失败完整解决方案

摘要: Windows环境下使用pnpm安装node-llama-cpp时,postinstall脚本执行失败(错误码3221225477),主要因缺少C++编译工具链或预构建二进制下载失败。解决方案: 基础排查:确保管理员权限、Node.js ≥18、路径无中文; 安装编译工具:推荐Visual Studio的“C++桌面开发”组件或windows-build-tools; 环境变量配置:强制CPU模式+国内镜像(NODE_LLAMA_CPP_FORCE_CPU=true,镜像地址替换为国内源); pnp

奶爸的编程之路,也就一周冷个三天 621

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

线上FullGC频繁排查-druid

线上FullGC频繁的排查问题

Rocky的博客 4万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

fullgc多久一次正常_一次线上JVM调优实践,FullGC40次/天到10天一次的优化过程

通过这一个多月的努力,将FullGC从40次/天优化到近10天才触发一次,而且YoungGC的时间也减少了一半以上,这么大的优化,有必要记录一下中间的调优过程。对于JVM垃圾回收,之前一直都是处于理论阶段,就知道新生代,老年代的晋升关系,这些知识仅够应付面试使用的。前一段时间,线上服务器的FullGC非常频繁,平均一天40多次,而且隔几天就有服务器自动重启了,这表明的服务器的状态已经非常不正常了,...

weixin_35879493的博客 8950

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

记一次排查线上频繁FullGC 过程

记一次排查线上频繁FullGC 过程一、一段艰辛的排查过程1.突发告警1.1 新生代老年代情况:1.2 老年代GC情况2.紧急处理3.问题定位3.1 dump文件过大:3.2 如何分析:3.3 排查原因3.4 水落石出4.修复上线二、收获 一、一段艰辛的排查过程 记录一次生产环境频繁FullGC的排查过程,艰辛但收获满满; 1.突发告警 这是一个风和日丽的下午,已经疲惫不堪的我正日常码代码,突然收到JVM监控告警,进入监控大盘查看JVM情况: 1.1 新生代老年代情况: 图片截了一张最简化的出来,因为公司

shixiaoling123的博客 744

线上FullGC问题排查

问题 前段时间发现线上的一个dubbo服务Full GC比较频繁,大约每两天就会执行一次Full GC。 Full GC的原因 我们知道Full GC的触发条件大致情况有以下几种情况: 程序执行了System.gc() //建议jvm执行fullgc,并不一定会执行 执行了jmap -histo:live pid命令 //这个会立即触发fullgc 在执行minor gc的时候进行的一系列检查 执行Minor GC的时候,JVM会检查老年代中最大连续可用空间是否大于了当前新生代所有对象的总大小。 如果大

疯一样的女子 1927
上一篇: GC问题
下一篇: JVM频繁Full GC的情况及应对策略
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值