线上环境 FGC 频繁,如何解决?
1、问题背景我们的服务遇到线上环境 FGC 频繁时我们是如何解决的。2、遇到的问题及解决方案2.1、pinpoint 打点存在大批量300ms以上排查方向检查db是否存在慢sql定位调用链中具体接口pinpoint inspector查看是否存在fullGC应用dubbo线程池是否耗尽(默认200个线程)打点存在大批量红点排查方向确认红点出现源头判断自己调用其他的业务服务是否存在超时)重启应用2.2、应用 cpu 突然升高排查方向应用是否存在fullGC检查应用流量是否突增是否存在不合理调用(可参考监控大盘)1、阈值标准pinpoint最近5min出现大批量超过5s以上的打点应用cpu 90%以上持续3min应用内存90%以上持续3min(瞬间暴增除外)收到上游最多两个以上业务方反馈2、解决措施打印线程栈jstack l 路径文件名.bindump jvm堆 jmap dump:format 路径文件名.bin重启应用运维执行命令/jenkins下游业务服务方响应超时sentinel consumer限流如果存在恶意攻击是联系安全部门拦截如果单业务流量大针对url或dubbo进行限流升级应用机器配置(一般是加机器)2.3、内存升的很快排查方向1、排查是否存在新版本发布的影响2、查询下调用频率较高的接口是否存在内存缓存的使用guava cache 和 caffeine cache3、查询下日志确定应用是否存在大批量的异常抛出2、解决措施打印线程栈jstack l 路径文件名.bindump jvm堆 jmap dump:format 路径文件名.bin重启应用运维执行命令/jenkins下游业务服务方响应超时sentinel consumer限流如果存在恶意攻击是联系安全部门拦截如果单业务流量大针对url或dubbo进行限流升级应用机器配置(一般是加机器)2.4、数据库 cpu持续90%以上10分钟ops是否明显增高(是否爬虫等异常流量)是否存在大批量数据查询(索引/动态sql)阈值标准数据库cpu100%持续2min且没有下降趋势链接数一直增加没有下降的趋势iops打满且没有下降的趋势内存使用率80%以上持续5min解决措施定向业务限流运维kill慢sql运维kill锁进程重启应用升级配置(但是需要考虑升级时间的影响问题)2.5、连接数线性增高且长时间不下查看是否存在慢sql查看应用的数据库连接池配置查看数据库中是否存在死锁show engine innodb status;解决措施定向业务限流运维kill慢sql运维kill锁进程重启应用升级配置(但是需要考虑升级时间的影响问题)2.6、iops飙高ddl操作是否针对大表新增索引是否存在变更大表字段业务上是否存在大批量操作(写入或读取)解决措施定向业务限流运维kill慢sql运维kill锁进程重启应用/升级配置(但是需要考虑升级时间的影响问题)2.7 内存升高确认下数据库连接数是否异常(连接也占用内存)解决措施定向业务限流运维kill慢sql运维kill锁进程重启应用/升级配置(但是需要考虑升级时间的影响问题)2.8、中间件MQ 消息堆积基本不需要处理2.9canal delay延时高排查方向大批量数据操作是否存在和其他业务共用canal受其他业务影响阈值标准garafa canal delay 延迟超过用户不可接受的范围解决措施业务评估无影响情况下联系运维重置消费位点2.10、线上环境 FGC 频繁1、明确分工这个步骤应该是在事前就已经明确好的类似于一个故障处理流程规范这边需要明确出3个主要角色1总指挥负责故障处理整体指挥的人例如快速拉起线上/线下会议、通知到系统核心同学对各同学工作进行分工等等。该角色一般由主管来担任或者主管指定的另一个同学。2故障恢复小组负责故障恢复的同学该部分同学的任务就是让系统以最快的速度恢复正常。3故障定位小组负责故障定位的同学该部分同学的任务就是定位出问题的根本原因。大部分同学的回答可能会集中在故障定位中但其实另外两个角色也是非常重要的在线上出现问题时止损永远是放在第一位其次才是定位。2、故障恢复2.1、线上发布导致查看故障服务近期是否存在上线操作如果有的话优先采取回滚解决。分析该场景应该是最常见的场景就是刚上的代码存在bug。2.2、非线上发布导致1小面积故障如果故障机器只是发布在少量机器例如某机台机器、某个机房机器、某个地域的机器、某个泳道的机器等等。此时优先采取禁用服务器解决禁用前先评估禁用这批机器后是否存在服务容量问题如果是则先扩容。分析该场景一般是代码存在bug但是该场景的使用频率很低所以上线时没暴露出来只是偶尔会被触发到。也是出现概率比较大的场景。2大面积故障如果故障机器不存在共性这个概率说实话非常非常小但是如果碰到了故障恢复小组能做的事情就比较有限了。因为这个场景大概率是代码存在bug同时发布时没有被大量触发而是到现在才被大量触发需要定位才能根本解决。此时故障恢复小组能做的就是使用扩容、重启、限流等手段来尽量维持服务的运转同时给故障定位争取时间。分析之所以说该场景概率小是因为分布在大量机器上的故障通常是使用频率高的场景这部分场景一般在服务发布时就会暴露出问题而不是发布很久之后。但是这个场景也是确实存在的但是会比较少。3、故障定位故障定位主要是用于应对故障恢复中的最后一个场景也是将故障恢复和故障定位分成两个小组并行执行的主要原因。3.1、FGC 能正常回收到内存通过监控或GC日志我们能看到每次FGC后都能正常回收到内存但是内存很快又被占满导致又出现FGC从而出现FGC频繁。这个场景通常可能由于两个原因导致1Eden 区配置太小导致大量对象直接进入老年代从而导致老年代快速被占满。2业务量较大特别是在业务高峰期。而当前的服务器配置已经无法满足当前的业务量。对于这两个原因代码本身可能没有大问题优先采取扩容机器降低单台服务器压力即可解决。后续则需要重新评估当前服务器的配置是否满足当前的业务量JVM参数是否存在优化空间等等。分析该场景是由于业务量增大没有及时评估或者JVM参数配置存在问题导致的整体来说出现的概率较小。3.2、FGC 不能正常回收到内存通过监控或GC日志我们能看到每次FGC后只能回收到很小的空间甚至回收不到空间从而出现FGC频繁。对于这个场景二话不说先dump下内存使用工具看下当前的内存泄漏情况、内存分布情况等等查看是哪个对象占用了大量内存。具体工具常见的例如 Eclipse MAT如果公司内部有封装的工具就更好了。通常查看完内存占用情况大概率会看到个别对象占用了大量的内存结合其引用链定位出在代码中的位置。接着就是根据代码分析问题的严重程度如果是小概率触发的场景大部分请求其实正常则可以先禁用问题机器后续上线修复即可。如果是大概率触发的场景则查看是否存在降级开关如果有则优先降级解决如果没有则只能修改代码走紧急修复流程。总结整体的解决流程其实还是比较简单的没有太复杂的东西。大多数情况下用好扩容、禁用、重启这几个常见手段即可解决大部分问题。个人经验而言线上频繁FGC问题90%以上是由于开发同学代码存在问题导致的例如常见的存在死循环、开无界队列等等。以上的问题在dump后很容易就能定位到根本原因。而如果遇到诸如依赖的第三方jar存在bug导致的问题例如Guava、Log4j这种场景一般是在极端情况下出才会出现所以一般只会出现在少数机器禁用即可临时解决然后后续再慢慢排查。

相关新闻

配网自动化多网融合方案

配网自动化多网融合方案

在配电自动化领域,现场设备的高效管理一直是个挑战。传统模式下,一台通信设备对应一套数据采集终端,设备数量多、线路复杂、运维成本高。随着配电网对实时性和可靠性要求的不断提升,一种新的思路正在被验证——通过一台设备实现双…

2026/7/8 8:57:24阅读更多 →
抖音批量下载终极指南:免费开源工具快速保存无水印视频与素材

抖音批量下载终极指南:免费开源工具快速保存无水印视频与素材

抖音批量下载终极指南:免费开源工具快速保存无水印视频与素材 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallbac…

2026/7/8 8:57:24阅读更多 →
LLM架构七年演进:从Transformer到DeepSeek V4

LLM架构七年演进:从Transformer到DeepSeek V4

一、注意力机制:从多头到潜在 注意力是Transformer最核心的运算。标准的多头自注意力(MHA)将输入投影到多个独立子空间,在每个子空间内独立计算注意力分布,最后拼接输出。其计算复杂度为 O(nd),其中 n 为序…

2026/7/8 8:57:24阅读更多 →
面试必考字符串算法:3类高频题+4套可直接复制代码,吃透轻松拿下前端算法手撕题

面试必考字符串算法:3类高频题+4套可直接复制代码,吃透轻松拿下前端算法手撕题

前言 前端面试手撕算法,字符串题出现频率稳居前3。 很多同学只会用split/reverse简单API写法,遇到最多删除一个字符判断回文这类变形题直接卡壳。 读完本文你能收获: JS字符串底层包装类、toString、call原理底层讲解 基础回文字符串两套实…

2026/7/8 9:53:32阅读更多 →
GEARS vs 线性基线:Nature Methods 2025 基准测试深度解读与3点启示

GEARS vs 线性基线:Nature Methods 2025 基准测试深度解读与3点启示

GEARS vs 线性基线:Nature Methods 2025 基准测试深度解读与3点启示深度学习模型在生物医学领域的应用正面临前所未有的挑战与反思。2025年《Nature Methods》发表的基准研究《Deep-learning-based gene perturbation effect prediction does not yet outperform si…

2026/7/8 9:53:32阅读更多 →
Typeahead 2.0 智能预测引擎深度评测

Typeahead 2.0 智能预测引擎深度评测

在构建智能搜索或推荐系统时,很多开发者往往过度关注算法模型的复杂度,却忽略了底层引擎在实际生产环境中的表现。我们常常遇到这样的场景:实验室里跑分完美的模型,一旦上线面对真实用户的混合输入、网络波动或是突发流量&#xf…

2026/7/8 9:53:32阅读更多 →
深度解析SMUDebugTool:AMD Ryzen处理器底层调试架构与实现原理

深度解析SMUDebugTool:AMD Ryzen处理器底层调试架构与实现原理

深度解析SMUDebugTool:AMD Ryzen处理器底层调试架构与实现原理 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: ht…

2026/7/8 9:53:32阅读更多 →
支付宝AI开放平台正式上线,面向企业开发者和代开发服务商开放邀测

支付宝AI开放平台正式上线,面向企业开发者和代开发服务商开放邀测

7月7日讯,据支付宝消息,支付宝AI开放平台正式上线,并面向企业开发者、代开发服务商开放邀测。该平台主要面向商家和机构提供AI化服务能力升级支持,帮助相关主体在支付宝生态内更便捷地接入智能服务。 根据介绍,通过支…

2026/7/8 9:53:32阅读更多 →
从运营小白到效率达人:电商物流管理的完整进化指南

从运营小白到效率达人:电商物流管理的完整进化指南

做电商三年多,我见过太多运营同行在同样的坑里反复摔倒。今天想把这些经验完整梳理一遍,从最基础的认知到系统化的管理,从单打独斗到团队协同,希望能给正在这条路上摸索的你一些参考。 这篇文章不讲高深的理论,全是实战…

2026/7/8 9:48:31阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/8 5:12:14阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/8 7:00:12阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/8 2:26:06阅读更多 →
作为一个给团队打绩效的人,我想说几句

作为一个给团队打绩效的人,我想说几句

我每半年都会给团队成员打绩效,也会参与和 CTO 的绩效校准,所以从管理者的视角,说说这件事 首先,我先把结论告诉你:接受结果,但一定要把原因问清楚。 因为当绩效公布到你这里的时候,结果基本已…

2026/7/8 0:01:17阅读更多 →
A股股指期货:全维度解析(多表格结构化完整版)

A股股指期货:全维度解析(多表格结构化完整版)

一、基础定义与核心本质股指期货全称股票价格指数期货,是中国金融期货交易所(中金所)上市的标准化金融期货合约,交易标的为 A 股大盘指数,约定未来特定时间按约定价格现金交割指数涨跌差价,不交割一篮子股票…

2026/7/8 0:01:17阅读更多 →
iOS越狱新手指南:从困惑到掌控,3天解锁iPhone无限潜能的真实故事

iOS越狱新手指南:从困惑到掌控,3天解锁iPhone无限潜能的真实故事

iOS越狱新手指南:从困惑到掌控,3天解锁iPhone无限潜能的真实故事 【免费下载链接】Jailbreak iOS 26.4 - 26, 17 - 17.7.5 & iOS 18 - 18.7.3 Jailbreak Tools, Cydia/Sileo/Zebra Tweaks & Jailbreak News Updates || AI Jailbreak Finder &…

2026/7/8 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/8 6:59:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/7 5:11:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/7 5:11:21阅读更多 →