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

故障排查详解

故障排查详解本章导读系统故障不可避免,但快速定位和解决问题的能力决定了系统的可用性。本章系统讲解OOM、CPU飙升、死锁等常见故障的排查方法与工具使用,帮助读者建立完整的故障排查体系,从"盲人摸象"进化到"精准定位"。学习目标:目标1:掌握JDK诊断工具(jstack、jmap、jstat)的使用方法目标2:能够分析堆转储文件定位内存泄漏根因目标3:掌握CPU飙升问题的定位流程与常见原因分析目标4:能够检测和诊断线程死锁并制定预防策略目标5:建立系统化的故障排查思维框架与应急预案前置知识:熟悉JVM内存模型与GC机制,了解多线程编程基础,具备Linux运维经验阅读时长:约 50 分钟一、知识概述故障排查是保障系统稳定运行的核心能力。当系统出现异常时,能够快速定位问题根因并采取有效措施,是每个开发和运维人员必备的技能。本文将详细介绍Java应用常见故障的排查方法和工具使用。1.1 故障排查体系┌─────────────────────────────────────────────────────────────┐ │ 故障排查体系 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. 故障发现 │ │ └── 监控告警、用户反馈、日志异常 │ │ │ │ 2. 故障定位 │ │ └── 分析症状、收集信息、定位原因 │ │ │ │ 3. 故障处理 │ │ └── 临时方案、根本解决、验证效果 │ │ │ │ 4. 故障复盘 │ │ └── 总结原因、改进措施、文档沉淀 │ │ │ │ 常见故障类型: │ │ ┌─────────────┬─────────────────────────────────────┐ │ │ │ OOM │ 内存溢出,应用崩溃 │ │ │ ├─────────────┼─────────────────────────────────────┤ │ │ │ CPU飙升 │ CPU占用过高,响应缓慢 │ │ │ ├─────────────┼─────────────────────────────────────┤ │ │ │ 死锁 │ 线程阻塞,功能不可用 │ │ │ ├─────────────┼─────────────────────────────────────┤ │ │ │ 响应慢 │ 接口超时,用户体验差 │ │ │ ├─────────────┼─────────────────────────────────────┤ │ │ │ 连接异常 │ 数据库/缓存连接失败 │ │ │ └─────────────┴─────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘1.2 故障排查工具箱┌─────────────────────────────────────────────────────────────┐ │ 故障排查工具箱 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ JDK工具 │ │ ├── jps - 查看Java进程 │ │ ├── jstat - JVM统计信息 │ │ ├── jinfo - 查看JVM配置 │ │ ├── jmap - 内存映射、堆转储 │ │ ├── jstack - 线程堆栈 │ │ ├── jcmd - 多功能诊断工具 │ │ └── jconsole - 图形化监控 │ │ │ │ 系统工具 │ │ ├── top/htop - 系统资源监控 │ │ ├── vmstat - 虚拟内存统计 │ │ ├── iostat - IO统计 │ │ ├── netstat - 网络连接 │ │ ├── lsof - 打开的文件 │ │ ├── strace - 系统调用跟踪 │ │ └── perf - 性能分析 │ │ │ │ 高级工具 │ │ ├── Arthas - 阿里开源诊断工具 │ │ ├── JProfiler - 商业性能分析工具 │ │ ├── MAT - 内存分析工具 │ │ └── async-profiler - 异步性能分析 │ │ │ └─────────────────────────────────────────────────────────────┘二、OOM分析与排查2.1 OOM类型与原因┌─────────────────────────────────────────────────────────────┐ │ OOM类型与原因 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. Java heap space │ │ 原因:堆内存不足,对象过多无法回收 │ │ 解决:增大堆内存、分析内存泄漏、优化代码 │ │ │ │ 2. Metaspace / PermGen │ │ 原因:类加载过多、动态代理、反射使用过度 │ │ 解决:增大元空间、限制类加载、优化框架配置 │ │ │ │ 3. GC overhead limit exceeded │ │ 原因:GC时间过长,无法有效回收内存 │ │ 解决:优化GC参数、分析内存泄漏 │ │ │ │ 4. Direct buffer memory │ │ 原因:NIO直接内存不足 │ │ 解决:增大直接内存限制、检查NIO使用 │ │ │ │ 5. Out of swap space │ │ 原因:系统交换空间不足 │ │ 解决:增加系统内存、调整内存使用 │ │ │ │ 6. Requested array size exceeds VM limit │ │ 原因:请求的数组大小超过JVM限制 │ │ 解决:优化业务逻辑,避免创建超大数组 │ │ │ └─────────────────────────────────────────────────────────────┘2.2 堆内存分析# ============================================# 查看Java进程# ============================================jps-lvm# 输出示例:# 12345 myapp.jar -Xms2g -Xmx2g -XX:+UseG1GC# ============================================# 查看堆内存使用情况# ============================================jstat-gc1234510005# 输出说明:# S0C S1C S0U S1U EC EU OC OU MC MU# 512.0 512.0 0.0 128.0 8192.0 4096.0 16384.0 12288.0 8192.0 7168.0## S0C/S1C: Survivor区容量# S0U/S1U: Survivor区使用量# EC/EU: Eden区容量/使用量# OC/OU: 老年代容量/使用量# MC/MU: 元空间容量/使用量# ============================================# 生成堆转储文件# ============================================# 方式1: 使用jmapjmap-dump:format=b,file=heap.hprof12345# 方式2: 使用jcmdjcmd12345GC.heap_dump /tmp/heap.hprof# 方式3: 应用启动时自动生成(推荐生产环境)# -XX:+HeapDumpOnOutOfMemoryError# -XX:HeapDumpPath=/logs/heapdump.hprof# ============================================# 查看堆内存直方图# ============================================jmap-histo:live12345|head-30# 输出示例:# num #instances #bytes class name# ----------------------------------------------# 1: 50000 4000000 com.example.User# 2: 30000 2400000 java.lang.String# 3: 20000 1600000 java.util.HashMap$Node# ============================================# 使用MAT分析堆转储# ============================================# 1. 下载MAT: https://eclipse.dev/mat/# 2. 打开heap.hprof文件# 3. 查看Dominator Tree(支配树)# 4. 分析Leak Suspects(内存泄漏嫌疑)# 5. 查看Histogram(对象统计)2.3 内存泄漏排查实战// ============================================// 常见内存泄漏场景// ============================================// 场景1: 静态集合持有对象引用publicclassMemoryLeakDemo{// 静态集合会一直持有对象引用,导致无法被GCprivatestaticfinalMapString,ObjectCACHE=newHashMap();publicvoidaddToCache(Stringkey,Objectvalue){CACHE.put(key,value);// 如果不删除,会一直占用内存}// 正确做法:使用弱引用或定期清理privatestaticfinalMapString,ObjectWEAK_CACHE=newWeakHashMap();}// 场景2: 监听器未注销publicclassEventSource{privateListEventListenerlisteners=newArrayList();publicvoidaddListener(EventListenerlistener){listeners.add(listener);}// 忘记提供remove方法,导致监听器无法被回收// public void removeListener(EventListener listener) {// listeners.remove(listener);// }}// 场景3: ThreadLocal未清理publicclassThreadLocalLeak{privatestaticfinalThreadLocalbyte[]THREAD_LOCAL=newThreadLocal();publicvoidprocess(){THREAD_LOCAL.set(newbyte[1024*1024]);// 1MB// 忘记清理// THREAD_LOCAL.remove();}}// 场景4: 数据库连接未关闭publicclassConnectionLeak{publicvoidquery(){Connectionconn=null;try{conn=dataSource.getConnection();// 执行查询}finally{// 忘记关闭连接// if (conn != null) conn.close();}}}// 场景5: 缓存无限增长publicclassCacheLeak{privateMapString,CacheEntrycache=newHashMap();publicvoidput(Stringkey,Objectvalue){cache.put(key,newCacheEntry(value,System.currentTimeMillis()));// 没有清理过期缓存的机制}// 正确做法:使用Caffeine等缓存框架// private CacheString, Object cache = Caffeine.newBuilder()// .maximumSize(10000)// .expireAfterWrite(Duration.ofMinutes(30))// .build();}// ============================================// 内存泄漏排查示例// ============================================// 使用Arthas排查内存泄漏// 1. 启动Arthas// java -jar arthas-boot.jar// 2. 选择目标进程// 选择对应的Java进程编号// 3. 查看内存使用情况// dashboard// 4. 查看对象统计// heap

相关文章:

故障排查详解

故障排查详解 本章导读 系统故障不可避免,但快速定位和解决问题的能力决定了系统的可用性。本章系统讲解OOM、CPU飙升、死锁等常见故障的排查方法与工具使用,帮助读者建立完整的故障排查体系,从"盲人摸象"进化到"精准定位"。 学习目标: 目标1:掌握JDK…...

日志体系详解

日志体系详解 本章导读 日志是系统运行的"黑匣子",承载着故障排查、性能分析、安全审计的关键数据。本章从日志规范制定到ELK Stack实战部署,全面讲解如何构建高效、可靠的日志体系,让每一次故障都能被快速定位和复盘。 学习目标: 目标1:掌握日志内容规范与结构…...

应用监控详解

应用监控详解 本章导读 没有监控的系统就像在黑暗中摸索——你永远不知道问题何时发生、发生在哪里。本章深入讲解APM工具、链路追踪、指标采集三大监控支柱,帮助读者构建全方位的系统可观测性,实现从被动救火到主动预防的转变。 学习目标: 目标1:理解可观测性三大支柱(Me…...

Unity基础:UI组件详解:Slider滑动条的用法与值获取

Unity基础:UI组件详解:Slider滑动条的用法与值获取📚 本章学习目标:深入理解UI组件详解的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《Unity工程师成长之路教程》Unity入门…...

2026年4月21日60秒读懂世界:阅读与手机时间、汽车价格战、脑机接口临床提速,今天最值得关注的6个信号

🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...

Blender 3MF插件终极指南:如何免费实现3D打印文件格式无缝转换

Blender 3MF插件终极指南:如何免费实现3D打印文件格式无缝转换 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat Blender3mfFormat是一款功能完整的开源Blender…...

Qwen3-0.6B-FP8基础教程:理解Safetensors权重格式与FP8_E4M3特性

Qwen3-0.6B-FP8基础教程:理解Safetensors权重格式与FP8_E4M3特性 1. 引言:为什么你需要了解权重格式和量化 如果你刚开始接触大模型部署,可能会被各种技术术语搞得一头雾水。权重格式、量化、FP8、Safetensors……这些词听起来很专业&#…...

Phi-3.5-Mini-Instruct本地化优势:规避API限流/配额/隐私泄露风险

Phi-3.5-Mini-Instruct本地化优势:规避API限流/配额/隐私泄露风险 1. 为什么选择本地化部署 在当今AI应用蓬勃发展的时代,越来越多的开发者面临云端API服务的三大痛点:限流政策、配额限制和隐私安全风险。Phi-3.5-Mini-Instruct的本地化部署…...

(84页PPT)公司整套管理流程图(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 (84页PPT)公司整套管理流程图.pptx_PPT大模型实践案例资源-CSDN下载 资料解读:《公司整套管理流程图》 详细资料请看本解读文章的最后内容。 作为一套系统性…...

(82页PPT)APQP初级先期产品质量策划和控制计划(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 (82页PPT)APQP初级先期产品质量策划和控制计划.pptx_火灾应急处理措施资源-CSDN下载 资料解读:(82 页 PPT)APQP 初级先期产品质量策划和…...

终极指南:如何在Windows上高效管理安卓应用的完整解决方案

终极指南:如何在Windows上高效管理安卓应用的完整解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 对于需要在Windows系统上处理安卓应用的用户来说…...

AI 应用软件的开发技术

开发现代 AI 应用软件的技术栈早已超越了简单的“前端后端”模式。在 2026 年,一个完整的 AI 原生(AI-Native)应用通常由以下四大技术层级驱动。1. 模型与算力层这是应用的底层核心,负责推理与生成。大模型引擎: 开发者…...

老照片模糊发黄?别让珍贵回忆蒙尘,三步教你“复活”旧时光

在每个家庭的抽屉深处,或许都珍藏着一本厚重的相册。翻开它,泛黄的相纸、模糊的笑脸,瞬间将我们拉回到那个没有智能手机、没有高清摄像的年代。这些照片承载着父母的青春、我们的童年,是无可替代的宝贵记忆。然而,时光…...

视频合并软件哪个好用?UP主私藏的5款剪辑神器,让你的视频无缝衔接

你是不是也经常遇到这样的情况:出去旅游拍了一堆零散的Vlog片段,宝宝成长的可爱瞬间被记录在几十个短视频里,或者为了工作项目收集了多个视频素材……想把它们整合成一个完整的视频,却不知道从何下手?很多人因此在网上…...

电脑截图快捷键大全:别再用QQ和微信了,这才是高手的截图方式

在日常工作和学习中,截图是一项使用频率极高的操作。然而,很多人至今仍在依赖QQ、微信等社交软件的截图功能,不仅步骤繁琐,而且在没有网络或不想登录时就束手无策。其实,你的电脑系统(无论是Windows还是mac…...

4月21日发布!OPPO Pad Mini 要给小平板正名了

4月21日19:00,OPPO将召开新品发布会,除了Find X9s Pro等旗舰手机,最让我期待的就是OPPO Pad Mini这款小平板。说实话,这几年我一直觉得小平板是“鸡肋”——手机屏幕越做越大,折叠屏又能兼顾大屏,8.8英寸的…...

AngularJS 控制器

AngularJS 控制器 (Controller) 学习笔记 控制器是 AngularJS 应用的核心组件之一,负责初始化应用状态、定义行为逻辑,并作为视图(HTML)和模型(Scope)之间的桥梁。 一、控制器的基本概念 1. 什么是控制器…...

从单体到微服务:如何用Spring Cloud构建高可用医院信息系统HIS

从单体到微服务:如何用Spring Cloud构建高可用医院信息系统HIS 【免费下载链接】HIS HIS英文全称 hospital information system(医疗信息就诊系统),系统主要功能按照数据流量、流向及处理过程分为临床诊疗、药品管理、财务管理、患…...

生产环境mysql如何实现高可用_配置主从复制与自动故障切换

主从复制SHOW SLAVE STATUS显示Connecting的常见原因是网络通但权限或配置未对齐:主库需开启binlog且server_id全局唯一;从库CHANGE MASTER TO中MASTER_HOST不能为localhost或127.0.0.1,须填真实IP或域名。主从复制配不起来,SHOW …...

从混乱到有序:NSC_BUILDER 让你的 Switch 游戏库焕然一新

从混乱到有序:NSC_BUILDER 让你的 Switch 游戏库焕然一新 【免费下载链接】NSC_BUILDER Nintendo Switch Cleaner and Builder. A batchfile, python and html script based in hacbuild and Nuts python libraries. Designed initially to erase titlerights encry…...

da da wda d

da w d w...

c++怎么读取大端序设备的固件bin文件_字节反转与位移操作【详解】

...

暗黑破坏神2重生记:用d2dx让20年老游戏焕发现代光彩

暗黑破坏神2重生记:用d2dx让20年老游戏焕发现代光彩 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 还在为经典《…...

KMS激活终极指南:5分钟搞定Windows和Office永久激活难题

KMS激活终极指南:5分钟搞定Windows和Office永久激活难题 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾因Windows系统未激活而烦恼?是否因为Office办公软件弹出…...

计算机毕业设计:Python农业粮食产量与气候预测平台 Django框架 数据分析 可视化 机器学习 深度学习 大数据 大模型(建议收藏)✅

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ > 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与…...

NCMconverter完整指南:3步解锁加密音乐文件的终极播放方案

NCMconverter完整指南:3步解锁加密音乐文件的终极播放方案 【免费下载链接】NCMconverter NCMconverter将ncm文件转换为mp3或者flac文件 项目地址: https://gitcode.com/gh_mirrors/nc/NCMconverter 你是否曾经遇到过这样的情况:从音乐平台下载了…...

渗透基础知识ctfshow——Web应用安全与防护(第六 七章)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录混合型XSSXSS 练习(反射型)**绕过方法**新增知识:平台外带xss编码绕过XSS过滤绕过方法请求伪造漏洞_CSRF绕过方法最简单的SSRFSSR…...

如何简化多表关联SQL逻辑_利用视图封装复杂JOIN操作

PHP队列消费进程卡住需先检查pcntl_fork是否被禁用;AI请求须设硬超时;Redis队列应使用BRPOPLPUSH防消息丢失;systemd需调大MemoryLimit和RestartSec。PHP队列消费进程卡住不动?先查pcntl_fork是否被禁用很多线上环境(尤…...

部署本地AI大模型--ollma

下载链接: 1.官网:在Windows上下载《Ollama 2.github:Release v0.21.0 ollama/ollama 前言:为什么选择 Ollama Ollama 是一款专为本地运行大模型打造的开源工具,它把复杂的环境配置、依赖管理和模型量化过程都封装…...

3步完成微信聊天记录备份:WeChatExporter终极免费教程

3步完成微信聊天记录备份:WeChatExporter终极免费教程 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter WeChatExporter是一款免费开源的微信聊天记录导出工具&…...