当前位置: 首页 > news >正文

线上服务器内存飙升到90%排查方法

这是一个典型的 Java 线上内存问题,可以按「应急止血 → 定位根因 → 长期根治」三个阶段来处理。下面给你一套可直接用于生产环境的标准排查流程


一、应急止血(先保系统)

目标:不让服务继续恶化,争取排查时间

1️⃣ 快速判断是不是 Java 进程吃内存

top # 或 ps -aux | grep java

重点关注:

  • RES / RSS:常驻内存

  • %MEM

  • Java 进程是否持续上涨不回落

✅ 如果非 Java 进程导致,直接处理对应进程即可。


2️⃣ 临时缓解手段(可立即执行)

场景

操作

内存快打满

临时扩容机器 / 增加 swap

无法立即重启

降低流量(限流、切流)

已影响业务

优雅重启服务

⚠️重启前务必保留现场(见第二节)


二、线上定位(核心)

✅ Step 1:确认是哪种内存问题

Java 内存 =Heap + Non-Heap + Off-Heap

1. 查看 JVM 内存概况
jstat -gc <pid> 1000 10

关注指标:

  • OU:Old 区使用量(是否持续增长)

  • YGC / FGC:GC 次数 & 时间

  • FGCT:Full GC 时间是否过长

📌现象判断表

现象

可能原因

Old 区一直涨

内存泄漏

Full GC 频繁但回收少

对象无法释放

Heap 正常但 OS 内存高

Direct Memory / JNI / 线程

Metaspace 增长

动态类加载


✅ Step 2:抓取堆内存快照(最重要)

⚠️必须提前预留磁盘空间(≥ 1.5 × 最大堆)

jmap -dump:live,format=b,file=heap.hprof <pid>

或自动触发(推荐):

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/

✅ Step 3:分析 Heap Dump(本地分析)

工具推荐:

  • MAT(Memory Analyzer)

  • VisualVM

  • JProfiler

重点看:

  1. Dominator Tree

  2. Histogram

  3. GC Roots

📌 常见泄漏点:

  • 静态Map / List / Cache

  • 线程池未释放

  • 监听器 / 回调未注销

  • Session / 连接池泄漏

  • 本地缓存(Guava Cache 无过期)


✅ Step 4:排查非堆内存(非常关键)

1️⃣ 查看 JVM 各区域
jcmd <pid> VM.native_memory summary

重点:

  • Java Heap

  • Class (Metaspace)

  • Thread

  • Code

  • Internal

2️⃣ 常见 Off-Heap 泄漏

类型

说明

DirectByteBuffer

Netty / NIO

JNI

C 堆泄漏

线程栈

线程数暴涨

Zip / 解压流

未 close

📌 Netty 项目90% 是 Direct Memory 问题


✅ Step 5:线程排查(防止隐形内存杀手)

jstack <pid> > jstack.log

检查:

  • 线程数是否异常(几千个)

  • 是否有大量:

    • WAITING (parking)

    • BLOCKED

    • 自定义线程池


三、典型真实案例(对照参考)

🔴 案例 1:静态 Map 缓存泄漏

static Map<String, Object> cache = new HashMap<>();

✅ 解决:

  • 改用WeakHashMap

  • 或设置 TTL(Caffeine)


🔴 案例 2:Netty Direct Memory 泄漏

-XX:MaxDirectMemorySize 未限制

✅ 解决:

-XX:MaxDirectMemorySize=2g

并监控:

BufferPoolMXBean

🔴 案例 3:线程池无限增长

Executors.newCachedThreadPool()

✅ 解决:

  • 使用ThreadPoolTaskExecutor

  • 设置队列 + 拒绝策略


四、长期根治方案(必做)

✅ JVM 参数优化示例

-Xms4g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+HeapDumpOnOutOfMemoryError -XX:NativeMemoryTracking=summary

✅ 监控体系建设

监控项

工具

JVM 内存

Prometheus + JMX Exporter

GC

GC 日志

线程数

Micrometer

Direct Memory

BufferPoolMXBean

OOM 告警

企业微信 / 钉钉


五、标准排查 checklist(可直接给运维)

✅ 是否 Heap 泄漏

✅ 是否 Metaspace 过大

✅ 是否 Direct Memory 未限制

✅ 是否线程数异常

✅ 是否缓存无过期

✅ 是否第三方 SDK Bug


六、我可以继续帮你做的事

如果你愿意,可以把下面信息发我,我可以直接帮你判断根因

  1. JVM 参数(ps -ef | grep java

  2. jstat -gc输出

  3. 使用的框架(Spring Boot / Netty / MQ)

  4. 内存增长曲线(是否线性)

http://www.rkmt.cn/news/1431319.html

相关文章:

  • ARM GICv2虚拟中断机制与优化实践
  • 搞定QEMU虚拟Win10 ARM的网卡和OOBE错误:一份手把手的驱动与注册表修复指南
  • 2026年5月资产评估资质申请服务评测:江苏,上海,河北,申请拍卖资质、申请涉外调查许可证书、申请资产评估备案选择指南 - 优质品牌商家
  • 从《鱿鱼游戏》到推荐系统:图解马尔科夫链蒙特卡洛(MCMC)如何悄悄影响你的生活
  • VCTK数据集下载与预处理保姆级教程:从官网压缩包到110个说话人文件夹的完整流程
  • 从健康数据到市场趋势:APC模型在Python/R中的花式应用与可视化
  • 从工作组到AD域:中小企业IT管理升级实战,手把手教你用Windows Server 2022搭建第一个测试域
  • 北京净化车间整体拆除公司实测评测:北京宾馆酒店拆除回收公司/北京工业设备回收公司/合规与专业维度对比 - 优质品牌商家
  • Windows驱动存储管理深度解析:Driver Store Explorer核心技术架构与实践指南
  • Shapely计算IOU踩坑记:TopologyException自相交错误,一个buffer(0.01)就搞定了?
  • Ubuntu 20.04/22.04 下搞定Isaac Gym的Segmentation fault:显卡、Vulkan与显示服务器的三角关系
  • 2026年银行分行选址的5大硬性标准,你的分行达标了吗?
  • AI Agent Harness多终端数据同步
  • GEO技术架构深度解析:从RAG机理到中小企业工程化落地
  • 【五分钟完成】办公自动化工具 OpenClaw,Windows 安装全攻略(包含安装包)
  • 告别延迟抖动:用PREEMPT_RT内核+IGH EtherCAT主站打造你的实时Linux工控系统(Ubuntu 20.04实测)
  • 告别驱动烦恼:用Java Socket直连网络打印机,5分钟搞定PDF打印任务
  • 冈萨雷斯《数字图像处理》MATLAB实战代码包:12章算法+预处理函数+可视化界面
  • 从Excel手工表到AI自适应现金流引擎:一位CFO的90天攻坚手记(含可复用Prompt库)
  • T-S型模糊神经网络MATLAB实现包(含水质实测数据与FuzzyNet对比模型)
  • 深入理解Linux loop设备:从ISO挂载到容器存储,/dev/loop0-6 100%背后的原理与排查
  • 直播弹幕抓取困局终结者:BarrageGrab如何用WSS直连技术重塑多平台数据采集体验
  • 告别拥堵焦虑:用Python+PyTorch复现STGCN,手把手教你搭建自己的交通流量预测模型
  • 别再死记硬背了!用‘虚拟地址找家’的故事,5分钟搞懂Linux一级页表寻址原理
  • MATLAB实现的DSSS通信全流程仿真:从汉明编码到多径信道误码分析
  • 中国车牌生成器:解决AI视觉训练数据稀缺的智能解决方案
  • 如何3秒内将网页图片另存为JPG/PNG/WebP:终极图片格式转换指南
  • RTX51中断优先级配置与系统稳定性解析
  • VMware 安装 Ubuntu 24.04 (图形)完整教程
  • 联想Y7000P装Ubuntu20.04没WiFi?别慌,手把手教你搞定AX211网卡驱动(附内核版本避坑指南)