线上Java应用排查和诊断规范
@郑昀 整理
标准做法一:OOM触发HeadpDump
目的:
OOM发生时,输出堆栈快照文件,供研发人员分析。
在JVM中,如果98%的时间是用于 GC 且可用的 Heap size 不足2%的时候,将抛出 OOM 异常。
配置操作:
Resin/Tomcat 配置文件里追加 -XX:+HeapDumpOnOutOfMemoryError ,当 OutOfMemoryException 错误发生时,会自动生成 Heap Dump 文件。
同时配置 -XX:HeapDumpPath 指定快照文件的实际路径。
日志分析:
Heap Dump文件的分析,可以使用 Eclipse Memory Analyzer tool(MAT) 分析。
标准做法二:系统负载高触发ThreadDump
目的:
系统负载大于10时,调用 jstack 命令,输出 resin 线程快照,供研发人员分析。
配置操作:
一分钟扫描一次。如果系统的一分钟负载值(load1)大于10,或者80端口的连接数大于80时,进行打印。
日志分析:
Thread Dump文件的分析,可以使用 Thread Dump Analyzer(TDA)分析。
可选做法三:年老代使用率高触发HeapDump
目的:
Java工程的 OU/OC 到报警阈值时,调用 jmap 命令,输出堆栈快照,供研发人员分析。
OC 当前年老代空间容量。Current old space capacity (KB).
OU 年老代利用情况。Old space utilization (KB).
配置操作:
Nagios 监控到特定工程的 OU/OC 大于80%时,自动执行命令:jmap –dump:file={filename},format=b pid
日志分析:
多个Heap Dump文件的对照,使用 VisualVM 的比较内存快照功能。
标准做法四:默认开启GC打印
目的:
打印 GC 详细信息,供研发人员分析。
-XX:+PrintGC:输出形式:[GC 118250K->113543K(130112K), 0.0094143 secs] [Full GC 121376K->10414K(130112K), 0.0650971 secs]
-XX:+PrintGCDetails:输出形式:[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs] [GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]
-XX:+PrintGCTimeStamps:输出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]
-Xloggc:filename:输出GC信息到日志文件。
配置操作:
Resin/Tomcat 配置文件里,增加如下参数:
<jvm-arg>-XX:+PrintGCTimeStamps</jvm-arg>
<jvm-arg>-XX:+PrintGCDetails</jvm-arg>
<jvm-arg>-Xloggc:/data/application/%ProjectName%/logs/gc.log</jvm-arg>
郑昀 2013
-over-
赠图一枚:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2009-09-26 Refactor?or Patching?
2005-09-26 [OTA]制作OTA短信来配置手机与服务器同步