生产GC问题排查方案

记一次生产事故的排查与优 一、现象 在服务器上通过curl命令调用一个Java服务的查询接口,半天没有任何响应。关于该服务的基本功能如下: 1、该服务是一个后台刷新指示器的服务,即该服务会将用户需要的指示器数据提前计算好,放入redis中,当用户请求指示器数据时便从redis中获取; 2、指示器涉及到的模型数据更新时会发送消息到kafka,该服务监听kafka消息,收到消息后触发指示器刷新任务; 3、对于一些特殊的指示器,其涉及的项目和模型较多,且数据量比较大,无法通过kafka消息来触发刷新,否则一直处于刷新过程中,便每隔 阅读详情

‌一、实时监控与告警(预防阶段)‌

  1. ‌基础监控配置‌

    
    

    bashCopy Code

    # JVM启动参数 -Xloggc:/logs/gc-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=50M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution

  2. ‌关键监控指标‌

    • ‌GC频率‌:Young GC > 10次/分 或 Full GC > 1次/小时(告警阈值)
    • ‌暂停时间‌:Young GC > 200ms, Full GC > 1s(立即告警)
    • ‌堆内存使用率‌:Old Gen > 80% 持续10分钟
    • ‌对象晋升速率‌:通过 jstat -gcutil pid 5s 监控
  3. ‌监控工具栈‌

    
    

    mermaidCopy Code

    graph LR A[Prometheus] --> B[JVM Exporter] B --> C[Grafana Dashboard] D[ELK] --> E[GC日志分析] F[APM工具] --> G[应用性能关联]


‌二、问题诊断六步法‌

‌步骤1:确认GC症状‌
  • ‌高频Full GC‌:jstat 显示 FGC 列快速增加
  • ‌长暂停‌:GC日志中 Times: user=1.25 sys=0.05, real=1.30 secs
  • ‌内存不释放‌:堆使用率持续 >95% 且GC后回收不足
‌步骤2:获取现场数据‌

bashCopy Code

# 获取实时GC状态 jstat -gcutil <pid> 1000 10 # 每秒采样,共10次 # 生成堆转储(谨慎使用,避开高峰) jmap -dump:live,format=b,file=heap.hprof <pid> # 抓取线程快照 jstack -l <pid> > jstack.log

‌步骤3:GC日志分析‌

‌关键日志模式:‌


logCopy Code

[Full GC (Ergonomics) [PSYoungGen: 102400K->0K(204800K)] [ParOldGen: 874521K->880000K(1048576K)] 976921K->880000K(1253376K), [Metaspace: 15321K->15321K(1060864K)], 3.4510286 secs]

  • ‌危险信号‌:Old Gen回收后占用反而增加(874521K → 880000K)
  • ‌Metaspace OOM‌:ClassLoader 频繁加载/卸载
‌步骤4:堆内存分析‌

bashCopy Code

# 使用MAT/Eclipse Memory Analyzer分析 mat heap.hprof

‌定位方向:‌

  • ‌支配树‌:查看占用超1%内存的对象
  • ‌OQL查询‌:SELECT * FROM java.util.HashMap WHERE size() > 1000
  • ‌GC Root链‌:分析无法回收对象的引用链
‌步骤5:关联分析‌
GC问题现象可能关联原因
Full GC后Old Gen不降内存泄漏/大对象直接进入老年代
Young GC时间陡增新生代过大/存活对象过多
CMS并发模式失败老年代碎片化/晋升速率过快
Metadata GC Threshold动态类生成(如CGLib)
‌步骤6:根因定位‌
  • ‌内存泄漏‌:未关闭资源(DB连接、文件流)、静态集合未清理
  • ‌过早晋升‌:Survivor空间不足(-XX:SurvivorRatio不合理)
  • ‌外部因素‌:CPU资源竞争、虚拟内存交换(vmstat 1查si/so)

‌三、高频问题应急处理‌

‌场景1:突发Full GC风暴‌

bashCopy Code

# 立即操作 kubectl scale deploy <app> --replicas=2 # 快速扩容分流 jcmd <pid> GC.run # 主动触发Full GC(临时缓解) # 参数临时调整(重启生效) -XX:CMSInitiatingOccupancyFraction=60 # 降低CMS触发阈值 -XX:+UseCMSInitiatingOccupancyOnly

‌场景2:Metaspace OOM‌

bashCopy Code

# 紧急恢复 -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M # 扩大空间 # 根本解决 arthas watch org.springframework.cglib.proxy.Enhancer destroy # 跟踪类加载

‌场景3:CMS碎片化‌

bashCopy Code

# 添加压缩参数 -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=1


‌四、优化验证与防控‌

  1. ‌压测验证‌

    
    

    bashCopy Code

    # 模拟流量验证优化效果 jmeter -n -t load_test.jmx -l result.jtl

  2. ‌防控措施‌

    • ‌代码规约‌:禁止 static Map 缓存无界数据
    • ‌资源约束‌:容器化部署添加内存限制
      
      

      yamlCopy Code

      # Kubernetes配置 resources: limits: memory: "8Gi" cpu: "4"

    • ‌GC参数基线‌:
      
      

      bashCopy Code

      # G1通用配置 -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1ReservePercent=15 -XX:InitiatingHeapOccupancyPercent=35


‌五、深度排查工具箱‌

工具用途生产安全等级
‌Arthas‌动态诊断(不重启)★★★☆☆
‌async-profiler‌低开销性能分析★★★★☆
‌Perfino‌实时JVM监控★★★★★
‌GCViewer‌GC日志可视化★★★★★

‌黄金原则‌:

  1. 优先保存现场后重启恢复服务
  2. 变更遵循「测试-预发-生产」流程
  3. 每次优化只调整一个变量

通过此方案,可系统化解决生产环境90%以上的GC问题,平均恢复时间(MTTR)缩减50%+。

手把手教你为ArduPilot添加自定义飞行模式:以自动巡检航线为例 本文详细介绍了如何为开源飞控ArduPilot添加自定义飞行模式,并以自动巡检航线为例,提供了从状态机设计、代码实现到地面站集成的完整开发指南。通过七步法手把手教学,帮助开发者深入理解飞控核心逻辑,实现无人机自主执行复杂巡检任务,满足行业应用定制需求。 阅读详情

相关推荐

国产数据库安装部署说明

国产数据库安装部署说明

weixin_38203586的博客 907

排查一次GC问题

GC问题的排查有两个方面的入手点 (1)排查GC问题的关键还是搞清楚内存到底被什么东西占用着,什么东西没有释放,内存是怎么分布的。 (2)同时GC是一个动态的过程,又要结合代码的运行过程,去判断什么到底什么情况下会出现问题,并最终得到修改问题的地方 如果你熟悉代码,那么GC过程理应是白盒,那么相对而言,你发现问题的过程很大程度上是围绕第一点去做,也更快速 如果你不熟悉代码,那么GC过程就是黑盒,那么你的过程最好还是从(1)到(2),先搞清楚内从里的内容,再去考虑代码中有可能出现问题的点,再结合运行时

u014783007的博客 1407

Echats-wordcloud 文字云图的踩坑点【Unknown series wordCloud】

一直都是报 【ECharts Unknown series wordCloud】这玩意可能要刷脸,祝你好运吧~

Sky_Bug的博客 2418

系统GC问题排查方法总结

一文教你如何解决系统out of memory问题

Darlight的博客 7683

多摄像头同步技术:帧同步信号在Sensor与解串器间的传递机制

本文深入探讨了多摄像头系统中帧同步信号的两种核心传递机制:由解串器统一发号施令或由主Sensor作为“带头大哥”。文章对比了两种方案在同步精度、硬件复杂度、成本及适用场景上的差异,并提供了实战配置要点与调试心法,为车载环视、ADAS及工业检测等应用提供关键的技术选型与实施指导。

weixin_29193359的博客 434

保姆级教程:用CST 2023一步步复现一个1-8GHz Vivaldi天线(含参数优化与结果分析)

本文提供了一份详细的CST 2023教程,指导读者如何从零开始设计并优化1-8GHz Vivaldi天线。内容涵盖工程设置、参数化建模、仿真加速技巧以及性能优化策略,特别适合需要实现宽带天线设计的工程师和研究人员。通过实战案例,帮助用户掌握Vivaldi天线的核心设计要点和CST高级功能应用。

weixin_30800987的博客 618

【JVM】GC导致的性能问题排查与解决方案,日志、堆分析工具介绍

重要应用程序在使用过程中,忽然无法响应用户请求,排查发现网络联通无问题,gateway能够正常接收分发请求,应用进程正常,正常向注册中心发送请求,但是接收http请求全部返回报错。添加gc后发现内存回收耗时太长,无法恢复。

qq_35456400的博客 2010

【YOLO】YOLOV5-Seg的Segment模块解析

Segment模块同时输出检测结果和分割掩模,通过轻量级分割头实现实时实例分割

浩瀚之水的专栏 598

GC问题排查实战一

GC问题排查实战一前言GC信息参数配置信息gceasy分析内存使用GC时间指标交互图信息GC之后的堆情况分析GC过程的持续时间分析GC暂停时间分析缺失的数据问题回收的容量分析 前言 最近在进行GC的相关调优和问题排查,进行了一个全用例的场景压测,可以抽象为5W用户连接,500QPS并发,然后持续大致24个小时。随后进行一些分析,并找出其中可能存在的问题,以及可以优化的方向。 GC信息 参数配置信息 -Xms12G -Xmx12G -Xmn4G -XX:MetaspaceSize=300M -XX:Surv

王伟王胖胖的博客 1097

芒果YOLOv8改进52:主干Backbone篇之GhostNetV2:提出原创GhostNetV2 架构升级版:引入长距离注意力机制增强廉价操作,构建更强端侧轻量型骨干,打造高效轻量级检测器

长距离注意力机制增强廉价操作,打造轻量级检测器

包括YOLOv5、YOLOv7、YOLOv8等模型改进 1611

【python股票价格预测】基于LSTM(长短期记忆网络)的股票价格预测(附python代码)

【python股票价格预测】基于LSTM(长短期记忆网络)的股票价格预测(附python代码)

k8291121的博客 1011

十分钟学会GC问题简单排查流程

线上的Java服务经常会遇到内存回收不到而导致GC频繁发生,严重影响服务质量,那么遇到这种问题该如何排查?本文就是一个GC问题排查的简单系统性分析。

CodeQiuShan的博客 1350

一文吃透 Tools for Applying SAP Notes:从 SNOTE、TCI 到 Solution Manager 与 SAP Cloud ALM

本文系统梳理了SAP技术与运维团队应用SAP Notes的高效工具与方法,涵盖On-Premise与云环境。文章首先阐述了精研SAP Notes工具的必要性,指出其是实施错误修复、法务变更和性能改进的关键载体。随后详细介绍了SNOTE、TCI、Solution Manager、Cloud ALM和Maintenance Planner等核心工具的定位与适用场景,并通过采购异常案例展示了标准更正流程。针对复杂修复场景,文章提出了TCI的批量处理方案,并强调将Note实施纳入变更治理流程的重要性。最后总结了三种

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 352

JDK 1.8 生产环境中遇到 OutOfMemoryError: GC overhead limit exceeded 异常时的排查流程和解决方案

若单次Full GC时间 > 1秒或频率 > 5次/分钟,需优化。长期 >90% 且每次GC释放 <5%,表明对象存活率过高。:监控 + 压测 + 代码审查(重点检查集合和缓存)。(存活时间过长的对象本应在Young GC被回收)。:优化GC策略 + 修复问题代码 + 限制资源使用。后果:延长Full GC停顿时间,可能使问题恶化。:此异常表明GC已无法有效回收内存,需从。应用吞吐量(TPS/QPS)是否恢复。后果:掩盖问题,最终导致进程卡死。(如日志消息、缓存条目)。(如 GCeasy)。

weixin_37944816的博客 833

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

糟糕,生产环境频繁Full GC,怎么办?

我们在面试时,经常会被面试官问到:线上服务频繁Full GC该如何优化?今天这篇文章跟大家一起聊聊这个话题,希望对你会有所帮助。当老年代空间不足时,JVM会触发的全局回收(Full GC),暂停所有应用线程。致命危害对象的晋升之路流程图:关键代码:年龄计数器// HotSpot虚拟机源码片段(objectMonitor.cpp)if (obj->age() >= MaxTenuringThreshold) { // 年龄阈值检查// 晋升老年代1、监控三件套。

sdgfafg_25的博客 915

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

查看java进程gc情况

在 Java 应用性能调优中,监控垃圾回收(GC)情况是关键环节。通过以上方法,可全面监控 Java 进程的 GC 状态,及时发现并解决内存泄漏、GC 频繁等性能问题。

sre救赎之路 2170

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

生产问题的排查方法和流程

本文系统介绍了Java生产环境问题的排查方法与工具。主要内容包括:1)问题分类(性能、稳定性、数据问题)及排查路径;2)基础工具(jps、jstack、jmap等)和高级诊断工具(Arthas、JProfiler)的使用;3)系统化排查流程(现象收集、定位问题、深入分析);4)常见问题场景(CPU100%、内存泄漏、FullGC等)的解决方案;5)进阶技巧(动态诊断、网络排查、链路追踪)和预防措施(监控体系、日志规范、代码防护)。强调生产问题排查应遵循"先恢复后定位"原则,结合工具熟练使

萧曳丶 482

生产故障:gc freelist等待事件引起的生产问题

从事IT数据库行业,记录日常工作中数据库知识及一些生产故障案例,不废话。如有不对请指正,欢迎关注小编:微信:xh870545795 优快云:dba_notes公众号:咖啡逗不逗一、问题背景 客户一套生产rac集群,版本为11.2.0.4,无补丁,反馈有性能问题,应用查询缓慢,数据库hang住,远程接入排查处理。二、分析过程1.排查数据库告警日志从12:17之后TNS类错误开始出...

dba笔记 679

每天一道面试题之架构篇|线上频繁Full GC排查实战指南

Full GC(完全垃圾回收)是Java应用性能的"红色警报",频繁发生会导致应用暂停、响应变慢,严重影响用户体验。掌握Full GC排查是高级工程师的必备技能。

sjkflw121150的博客 585

再一次生产 CPU 高负载排查实践

前言 前几日早上打开邮箱收到一封监控报警邮件:某某 ip 服务器 CPU 负载较高,请研发尽快排查解决,发送时间正好是凌晨。 其实早在去年我也处理过类似的问题,并记录下来:《一次生产 CPU 100% 排查优化实践》 不过本次问题产生的原因却和上次不太一样,大家可以接着往下看。 问题分析 收到邮件后我马上登陆那台服务器,看了下案发现场还在(负载依然很高)。 于是我便利用这类问题的排查套...

a14142的博客 137

面试_线上问题排查

1.死锁现象通常,死锁会表现为应用程序挂起,不响应用户请求或者CPU使用率下降2. 线程转储Jstack $进程id : 查看死锁的状况堆栈dump再从dump文件中搜索“deadlock”关键字3. 根据线程转储信息,对出现死锁的代码进行详细分析4. 调试工具调试定位5. 锁的优化方法:破坏产生死锁的条件。

qinwenjng120的博客 395

记一次生产系统每隔10小时(36000000毫秒)固定进行一次Full GC排查思路

某个应用在生产环境通过系统监控发现,应用每隔10小时就会触发一次Full GC,该系统当时承接的业务量并不大,而且固定10小时就会进行Full GC,通过监控时间轴发现Full GC频率很规律,直觉告诉我这不是JVM自身触发的Full GC操作,应该是某个定时任务中进行了垃圾回收操作,但是什么业务场景会存在这种情况呢?方法调用进行了搜索,甚至为了防止是通过反射方式调用的,还检索了所有业务代码,但是均未发现有业务代码进行该方法的调用。,如果没有设置,默认为false,此时会通过反射调用。

Coder-文小白的博客 756

生产大文件下载导致 OOM,顺藤摸瓜拿下

程序员的成长之路互联网/程序员/技术/资料共享关注阅读本文大概需要 2.8 分钟。来自:飞天小牛肉上周遇到了生产环境 OOM 的问题,找了一番之后基本定位了是大文件下载导致的问题,于是在网上搜罗了一番文章,下面分享一篇优质的解决方案,整个排查思路非常清晰,小白可以直接对照着来排查。事故发生上周五下午运营人员反馈,笔者所负责的后台系统从 14 点以后就卡卡的,虽然页面能够正常加载,但是一直处于数据...

良月柒 283

应用定时主动触发FGC问题排查

2、还是看不到具体来源,基于10小时这个数字太特殊直接在网上搜索看到是cxf-core三方依赖会主动触发,查看服务确实引用cxf依赖,可以通过参数org.apache.cxf.JDKBugHacks.gcRequestLatency=true关闭固定Full GC的逻辑。发现服务启动后会立刻主动触发一次,就服务重启时立马开始监听System.gc方法的调用堆栈,发现调用来源是sun.misc.GC$Daemon.run(GC.java:109)

qq_33606378的博客 593

JVM故障排查实战:生产环境案例分享(附解决方案)

本文分享了三个生产环境中的JVM故障案例:1)电商平台因订单缓存未清理导致内存泄漏,通过堆转储分析和代码修复解决;2)在线教育平台因新生代空间不足引发频繁Full GC,通过调整JVM参数和优化大对象创建解决;3)金融系统因线程死锁导致冻结,通过线程转储分析和统一锁顺序解决。案例表明JVM故障排查需结合监控工具、日志分析和代码审查,建议建立完善的监控机制并定期评估JVM配置。

fykam的博客 482
上一篇: JVM模型
下一篇: 生产环境OOM排查方案
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值