猿辅导二面:线上出现的OOM是如何排查的?

看是哪种OOM?

看报错信息/监控/容器事件,区分类型,不同解法完全不一样。

Java heap

java.lang.OutOfMemoryError: Java heap space GC overhead limit exceeded(一直 GC 但回收极少)

Direct/Off-heap

java.lang.OutOfMemoryError: Direct buffer memory(NIO/Netty/ByteBuffer) 原生内存耗尽(JNA、压缩、TLS、线程栈等)

Metaspace

java.lang.OutOfMemoryError: Metaspace(类加载泄漏/频繁重载)

系统/容器把进程杀了

K8s:OOMKilled;Linux:dmesg 里 Out of memory: Kill process JVM 日志未必有 OOM 栈

判定方法:应用日志、K8s 事件 (kubectl describe pod)、系统日志 (dmesg)、JVM 日志(GC/错误日志)。

快速止血(把服务活下来)

扩容/降流/限并发:临时缩小线程池或限流;必要时扩副本。

增配但留余量:容器 memoryLimit ↑,同时Xmx 要明显小于 limit(给 off-heap/线程/代码缓存留 30% 余量)。

降级:关闭大对象功能(一次性加载、导出、聚合)、降低批量大小。

打开取证开关(见下一步),重启服务。

取证与快速体检(上线就该常备)

JVM 启动参数(长期建议)

  • -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/dump(自动导出 heap dump)
  • -Xlog:gc*:file=/data/logs/gc.log:time,uptime,level,tags(JDK9+;JDK8 用 -Xloggc)
  • (可选)-XX:NativeMemoryTracking=summary(开销小)或 detail

线上排查常用命令

  • 线程/堆: jcmd <pid> GC.heap_info、jcmd <pid> GC.class_histogram jmap -histo:live <pid> | head -50(大对象分布) jmap -dump:live,format=b,file=heap.hprof <pid> jstack -l <pid>(看看是否卡某些线程/ThreadLocal 泄漏)
  • 原生内存: jcmd <pid> VM.native_memory summary(NMT:看 Direct / Internal / Thread 等占用)
  • 容器/系统: kubectl top pod / describe pod(OOMKilled) ps -o pid,rss,command -p <pid>、pmap -x <pid>、dmesg | tail

对症下药(不同 OOM 的根因与修复)

Heap OOM / GC Overhead

症状:堆占用持续上升或 Full GC 频繁。

定位:用 Dump 在 MAT/VisualVM 看Dominator Tree、GC Roots 路径,找最大保留集。

常见根因 & 修复

  • 无限制缓存/Map(没有 TTL/最大容量)→ 上 Caffeine/GuavaSize/Weight + TTL,监控命中率与大小
  • 聚合/拼装大对象(一次性 toList()、大 StringBuilder、无分页)→ 分页/分块处理,流式读写
  • ThreadLocal 泄漏(未 remove)→ try/finally 清理;线程池复用时尤需注意
  • 反序列化/JSON 组装大对象→ 换流式解析(Jackson streaming)、限制字段
  • 序列化队列堆积(MQ/队列消费不过来)→ 限流/背压,调小批量

调参兜底

  • 合理设置Xms=Xmx(避免频繁扩容),用G1/GenZ
  • 检查 -XX:MaxRAMPercentage(容器内)与 Limit 的匹配,确保Xmx < Limit × 0.7左右。

Direct buffer / Off-heap OOM

症状:报 Direct buffer memory 或 RSS 高而堆不高。

定位:NMT(VM.native_memory summary)、应用指标(Netty PooledArena)、-XX:MaxDirectMemorySize。

根因 & 修复

  • 未释放 ByteBuffer/Netty ByteBuf→ 确保 release():用 Try-With-Resources 包装,开启 Netty 泄漏检测 -Dio.netty.leakDetectionLevel=paranoid(只在测试/预发)
  • 无上限的直接内存→ 配置 -XX:MaxDirectMemorySize=256m~1g;Netty 配对象池且限制最大并发
  • 大响应/压缩/SSL 原生内存→ 减小批量、分块,确认本地/Native 库版本

Metaspace OOM

症状:OutOfMemoryError: Metaspace。

根因类加载器泄漏(反复热加载/动态代理生成类、URLClassLoader 未关闭)。

修复

  • 修正热加载逻辑;减少频繁生成新 Class。
  • 调整 -XX:MaxMetaspaceSize 但重点是修复泄漏。
  • jcmd <pid> VM.classloaders、GC.class_stats 辅助判断。

unable to create new native thread

症状:线程数爆表或系统 ulimit -u 限制。

修复

  • 控线程池并发、合并池;合理 queue 与拒绝策略。
  • 调整容器/系统线程数限制。
  • 用 jstack/top -H 找线程源头(哪个池在疯狂建线程)。

容器 OOMKilled(非 JVM 报 OOM)

症状:Pod 被杀,JVM没栈。

修复

  • JVM 堆(Xmx)+ 原生内存之和必须显著小于K8s Limit。
  • JDK11+ 使用 -XX:MaxRAMPercentage(如 50)配合 Limit。
  • 预留线程栈/Direct/Metaspace/CodeCache 等空间(通常 ≥ 30% 预留)。

防复发(工程化治理)

  • 监控告警:堆使用率、Young/Old GC 次数与时间、Full GC、RSS、Direct 内存、线程数、类加载数、对象分配速率。
  • 容量/压测:关键接口做 3× 峰值压测,观察 P95/P99 与 RSS;设置自动化内存回归测试
  • 限流与背压:线程池有界队列 + 合理拒绝策略;对外部依赖设置超时与舱壁。
  • 数据/批量:所有批处理/导出/聚合都限制批大小并流式处理。
  • 开关与熔断:配置化关闭大对象功能;遇压自动降级。

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

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

相关文章

未来轻量模型趋势:VibeThinker-1.5B多场景落地前景分析

未来轻量模型趋势&#xff1a;VibeThinker-1.5B多场景落地前景分析 1. 引言&#xff1a;轻量级模型的崛起与VibeThinker-1.5B的技术定位 近年来&#xff0c;大语言模型&#xff08;LLM&#xff09;的发展呈现出“参数规模竞赛”的趋势&#xff0c;动辄百亿甚至千亿参数的模型不…

小白也能懂:AI智能文档扫描仪快速入门手册

小白也能懂&#xff1a;AI智能文档扫描仪快速入门手册 1. 引言 在日常办公和学习中&#xff0c;我们经常需要将纸质文档、发票、合同或白板内容数字化。传统拍照方式往往存在角度倾斜、阴影干扰、背景杂乱等问题&#xff0c;导致阅读困难&#xff0c;影响后续使用。而专业扫描…

Java注解校验实战

一、注解校验概述 1.1 为什么需要注解校验&#xff1f; 在实际开发中&#xff0c;我们经常需要对输入数据进行校验&#xff1a; java // 传统方式&#xff1a;代码冗长、难以维护 public void createUser(String username, String email, Integer age) { if (username nul…

VibeVoice-TTS多场景应用:有声书生成实战案例

VibeVoice-TTS多场景应用&#xff1a;有声书生成实战案例 1. 引言&#xff1a;TTS技术演进与有声内容需求爆发 近年来&#xff0c;随着数字内容消费的持续增长&#xff0c;有声书、播客、语音助手等音频应用场景迅速扩展。传统文本转语音&#xff08;TTS&#xff09;系统虽然…

AnimeGANv2艺术创作:用AI生成二次元插画教程

AnimeGANv2艺术创作&#xff1a;用AI生成二次元插画教程 1. 引言 随着深度学习技术的发展&#xff0c;风格迁移&#xff08;Style Transfer&#xff09;已成为AI艺术创作的重要方向之一。在众多图像风格化模型中&#xff0c;AnimeGANv2 因其出色的二次元风格转换能力脱颖而出…

如何用AnimeGANv2打造个性化头像服务?企业应用案例

如何用AnimeGANv2打造个性化头像服务&#xff1f;企业应用案例 1. 引言&#xff1a;AI驱动的个性化头像需求崛起 随着社交媒体、虚拟形象和数字身份的普及&#xff0c;用户对个性化头像的需求日益增长。传统的手绘动漫头像成本高、周期长&#xff0c;难以满足大众化、即时化的…

AnimeGANv2技巧:自定义色彩风格调整

AnimeGANv2技巧&#xff1a;自定义色彩风格调整 1. 引言 1.1 AI 二次元转换器 - AnimeGANv2 随着深度学习在图像生成领域的不断突破&#xff0c;AI 风格迁移技术已从实验室走向大众应用。AnimeGANv2 作为专为“照片转动漫”设计的轻量级生成对抗网络&#xff08;GAN&#xf…

Node.js Array.from轻松转换流数据

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Node.js Array.from轻松转换流数据&#xff1a;解锁流式数据处理新范式目录Node.js Array.from轻松转换流数据&#xff1a;解锁流…

数据不再 “躺平”!宏智树 AI 解锁论文数据分析的 “懒人开挂模式”

作为深耕论文写作科普的教育博主&#xff0c;后台总能收到文科生的灵魂吐槽&#xff1a;“明明研究很有价值&#xff0c;却栽在数据分析上”“SPSS、R 语言学不会&#xff0c;数据图表丑到被导师骂”“好不容易做出图表&#xff0c;结果不会解读&#xff0c;白忙活一场”。论文…

深度学习毕设项目:基于python_CNN卷积神经网络训练蔬菜识别基于python_CNN深度学习 卷积神经网络训练蔬菜识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

深度学习毕设项目:基于python_CNN深度学习卷积神经网络训练识别墙体裂缝

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

效果展示:通义千问2.5-7B-Instruct打造的智能导游案例分享

效果展示&#xff1a;通义千问2.5-7B-Instruct打造的智能导游案例分享 随着大语言模型在垂直场景中的深入应用&#xff0c;如何将高性能、可商用的开源模型快速落地到实际业务中&#xff0c;成为开发者关注的核心问题。本文基于 通义千问2.5-7B-Instruct 模型&#xff0c;结合…

AI对话实战:用通义千问2.5-7B-Instruct打造智能客服系统

AI对话实战&#xff1a;用通义千问2.5-7B-Instruct打造智能客服系统 随着大语言模型在企业服务中的广泛应用&#xff0c;构建高效、可商用的智能客服系统已成为提升用户体验的重要手段。本文将基于通义千问2.5-7B-Instruct这一中等体量、全能型开源模型&#xff0c;手把手实现…

深度学习计算机毕设之基于卷积神经网络训练识别墙体裂缝

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

小白必看!用AI智能文档扫描仪3步搞定证件扫描

小白必看&#xff01;用AI智能文档扫描仪3步搞定证件扫描 1. 写在前面&#xff1a;为什么你需要一个本地化文档扫描方案 在日常办公和学习中&#xff0c;我们经常需要将纸质文件、合同、发票或证件快速转化为电子版。传统做法是使用专业扫描仪&#xff0c;但这类设备价格昂贵…

AI二次元转换器数据集解析:训练样本选择要点

AI二次元转换器数据集解析&#xff1a;训练样本选择要点 1. 引言 1.1 技术背景与应用需求 随着深度学习在图像生成领域的快速发展&#xff0c;风格迁移技术已从实验室走向大众应用。其中&#xff0c;AnimeGANv2 作为轻量级、高效率的图像到图像转换模型&#xff0c;因其出色…

AnimeGANv2案例:动漫风格家庭相册制作

AnimeGANv2案例&#xff1a;动漫风格家庭相册制作 1. 背景与应用场景 随着AI生成技术的快速发展&#xff0c;将现实照片转化为艺术风格图像已成为大众化需求。尤其在家庭影像管理、社交媒体分享和个性化内容创作中&#xff0c;用户越来越倾向于通过风格化处理赋予照片更强的表…

AnimeGANv2优化指南:解决动漫化后色彩失真的方法

AnimeGANv2优化指南&#xff1a;解决动漫化后色彩失真的方法 1. 背景与问题定义 随着深度学习在图像风格迁移领域的快速发展&#xff0c;AnimeGANv2 成为最受欢迎的照片转二次元动漫模型之一。其优势在于轻量级架构、快速推理能力以及对人脸结构的良好保持性&#xff0c;特别…

开题报告总被毙?宏智树 AI 科普:三步搞定导师认可的学术蓝图

作为深耕论文写作科普的教育博主&#xff0c;后台每天都能收到大量关于开题报告的求助&#xff1a;“选题改了八遍还是被说没创新”“文献综述写得像流水账&#xff0c;导师批我没逻辑”“研究方法瞎选&#xff0c;根本不知道怎么落地”。 开题报告是毕业论文的 “地基”&…

为什么VibeVoice-TTS部署失败?常见问题与解决步骤详解

为什么VibeVoice-TTS部署失败&#xff1f;常见问题与解决步骤详解 1. 引言&#xff1a;VibeVoice-TTS 的价值与挑战 1.1 技术背景与业务需求 随着生成式AI在语音领域的深入发展&#xff0c;传统文本转语音&#xff08;TTS&#xff09;系统在长文本合成、多说话人对话场景中的…