注:本文中的 SysOM 为阿里云操作系统控制台运维组件。
之前我们发布的SysOM 诊断 Skill,把操作系统层的排查经验固化成了 Agent 能直接调用的能力------CPU、内存、IO、网络、负载、延时、宕机、参数调优这些根因分析它都能覆盖。但机器上跑的 Java 应用,一直是运维和研发之间隔着的一层玻璃:OS 层看得到进程 RSS 在涨、CPU 在飙、load 在抖,却看不透 JVM 内部到底怎么了------是堆在泄漏还是堆外在泄漏?是 GC 卡顿,还是业务线程把 CPU 打满了?
这次,我们把 JVM 的排查经验也做进了 SysOM 诊断 Skill。你不用再记 jstat 怎么读、jmap 怎么 dump、GC 日志怎么解析、火焰图怎么看、NMT 怎么开------用大白话描述症状就行,Agent 会自己完成进程定位、数据采集和根因归因,几分钟给你一条从「现象」到「哪一行代码 / 哪块 JVM 区域」的完整根因链。
真实困境:应用「变慢了」,然后呢?
凌晨两点,业务反馈某个 Java 服务响应变慢、偶发超时。你登录机器,top 一看,某个 Java 进程 CPU 90%、RSS 一路上涨。到这一步,「发现异常」已经完成------但真正的排查才刚开始,而且 Java 应用的岔路比 OS 层更多。

这些工具每一个都有门槛,而且分散、割裂。一个「应用变慢」的问题,资深工程师可能要在 jstat、jstack、jmap、GC log、火焰图之间来回切换两三个小时。SysOM 诊断 Skill 新增的 Java 诊断能力做的,就是把这套「下一步该看什么」的判断固化下来,交给 Agent。
三大分析域:内存 / CPU / GC
你只需用自然语言描述症状,Skill 会自动判断该走哪条分析路径:

还有个省事的地方是进程免定位:就算你不知道要查的是哪个 Java 进程,也能直接发起诊断------Skill 会先扫出机器(或容器 Pod)上的 Java 进程列成候选,你选一个再进入深度分析,不用手动 jps 或 ps -ef | grep java。
内存诊断:从「RSS 高」到「哪一行代码在分配」
Java 内存问题最难的地方在于:OS 看到的进程 RSS,和 JVM 自己报告的内存,往往对不上。一块内存到底是 Java 堆、Metaspace、DirectBuffer,还是 JNI 库/线程栈这类堆外原生内存,直接决定了修复方向完全不同。
内存诊断 Skill 把这套拆解自动化:
-
内存快照:一次诊断即给出内存全景------Java 堆、非堆(Metaspace / CodeCache / DirectBuffer)、JNI/Other 堆外原生内存、RSS 与 JVM 统计内存消耗的差距、glibc 分配器驻留,透明大页,并指出主要贡献者是谁。
-
分配剖析:采样一段时间内的新增内存分配,直接给出 Top 分配调用栈------回答「到底是哪段代码在持续分配」。
-
NMT 建议:当需要区分「已驻留」的原生内存归属(线程/GC/编译器/native)时,给出 NativeMemoryTracking 的使用路径。
glibc 分配器内存碎片检测是 SysOM 业界首创的检测能力------从 OS 内核视角把现有 Java 工具(jmap / MAT / NMT)都定位不到的 glibc 内存泄漏看清楚。
CPU 热点:火焰图直达热点方法栈
CPU 打满时,最耗时的是「在成百上千的线程里找到那个真正吃 CPU 的调用路径」。CPU 热点分析 Skill 直接用火焰图回答这个问题:
- 火焰图直接告诉你哪几个方法栈在吃 CPU------占比多少、路径多深,一眼可见,不用在成百上千个线程 stack 里翻找。
- 报告里直接带分级修复建议(P0/P1/P2 + 具体改法),拿到就能对照改代码。
GC 分析:两种模式,覆盖「有日志」和「没日志」
GC 问题的排查门槛在于「要不要、能不能拿到 GC 数据」。GC 分析 Skill 提供两种模式,覆盖两类现实场景:
|--------|--------------------------------------|------------------------------------------|
| 模式 | 适用场景 | 特点 |
| 日志分析模式 | 进程已配置 GC 日志(如 -XX:+PrintGCDetails) | 立即返回,零额外开销,回溯历史 |
| 增量采集模式 | 未配置 GC 日志 / 需要精细 JFR 时序 / JDK11+ | 实时采集 5--10 分钟 JFR + GC 日志 + OS 指标,给出完整时序 |
无论哪种模式,Skill 都会给出GC 事件时序与 STW 停顿分布、吞吐评估与调优建议、堆内存趋势,并识别 Full GC 频繁、Young GC 抖动、Mixed GC 回收跟不上晋升、GC 开销过高等典型模式。JDK8 无法动态开 JFR 时会自动回退到 GC 日志采集,无需人工干预。
组合诊断:单域看不清,跨域联动
真实问题往往横跨多个分析域,Skill 会自己串起多条分析路径:
1.GC 导致 CPU 高:先做 GC 分析确认 GC 频率,再做 CPU 分析看 GC 线程占比。
2.内存泄漏导致频繁 GC:先做 GC 分析观察 Full GC 形态,再做内存诊断深挖堆。
3.CPU 热点发现大量对象分配:先做 CPU 分析定位分配热点,再做内存分配剖析追踪趋势。
实战案例
案例一:某客户 Java 服务内存持续增长
背景:某内容平台客户的数据同步服务,需要把大批量业务数据压缩后上传到对象存储。上线一段时间后,运维发现服务所在容器的 RSS 每隔几天就逼近内存 limit、被 OOMKilled 重启;可 -Xmx 以内的 Java 堆一直很平稳,jmap 堆 dump 也看不出异常对象,典型的「堆没问题、进程内存却一直涨」。OS 层只看得到 RSS 在爬,定位不到究竟是 JVM 的哪块内存。
运维把问题交给了 Agent,一句「实例 Java 业务 pod 内存一直上涨、疑似内存泄漏」。Agent 自己完成了进程定位和内存快照采集,直接给出方向性结论:

-
内存快照:Java 堆和 Metaspace 都稳定,但 RSS 与 JVM 账本的差距(RSS gap)持续扩大,主要贡献者是 JNI/Other 堆外原生内存和 glibc 分配器驻留------判定为堆外原生内存泄漏,不是堆泄漏。glibc 分配器内存碎片检测是 SysOM 业界首创的检测能力,从 OS 视角把现有 Java 工具都定位不到的 glibc 内存泄漏看清楚。
-
Profiling 定位代码路径:指向 java.util.zip.Deflater 的 zlib native 缓冲区------进程创建了大量 Deflater 实例,却没调 end() 释放。
-
一句话根因:压缩逻辑用完 Deflater 没及时释放 native 资源,叠上 glibc 内存碎片严重,最后把容器内存打满。
案例二:某电商客户订单服务 CPU 飙高
背景:某电商客户的核心订单处理服务 OrderProcessingService 在一次大促压测中 CPU 持续高位、接口响应明显变慢。运维同学只知道是「某个 Java 业务 Pod CPU 异常」,不清楚是哪段代码,也来不及逐个线程抓栈。
直接把问题交给了带 SysOM 诊断 Skill 的 Agent,一句「帮我诊断这个实例的 Java 业务 Pod CPU 异常」,Agent 自己完成了进程发现和火焰图采样,直接给出结论:

火焰图采样(近 5 分钟)精准定位到三处热点:
-
随机数生成:
java.util.Random多线程共享 seed 竞争,是最大热点(占采样 15.2%) -
正则回溯:
validateOrderId的正则含嵌套量词,高频调用下触发回溯 -
队列同步:
LinkedBlockingQueue生产消费速率不匹配,线程频繁挂起/唤醒
采样图后面跟了分级修复建议:P0 换成 ThreadLocalRandom、P1 优化正则、P2 调整队列容量或引入背压。全程约 2 分钟,不用登录机器、不用手动 jstack 抓栈,直接告诉客户「问题出在哪几行」。
案例三:某客户服务频繁 GC ------ 对象分配速度过快
背景:某客户的实时服务,业务高峰期偶发接口变慢、超时告警。运维怀疑是 GC 在作祟,可这个进程上线时没配 GC 日志,线上也不敢重启改启动参数,一时无从下手。
运维把它交给任意 Agent(本文以 QoderWork 为例)。进程没配 GC 日志,Agent 自动采集了约 3 分钟 GC 数据后给出结论:

结论一目了然:3 分钟 2257 次 GC,根因是应用大量字符串拼接高频分配 byte\[\](分配速率 4873 MB/s)把 Young GC 顶满;改用 StringBuilder 预分配即可从源头把分配速率降下来。
快速上手
SysOM 诊断 Skill 新增的 Java 应用诊断能力已经上线,根据你手头的使用环境选下面其中一条即可:
场景一:想接到你自己的运维 Agent 里
到阿里云 Skill 门户搜索「SysOM 诊断 Skill」,一键下载后接入你自己的运维 Agent。接入后给 Agent 发需求就行,注意只有已纳管到阿里云操作系统控制台、NMT 这些需要内核可观测基础设施的数据。
详细使用文档与命令参数参见阿里云操作系统控制台 SysOM 诊断 Skill 产品文档。
SysOM 诊断 Skill 链接:
++https://skills.aliyun.com/skills/alibabacloud-sysom-diagnosis++
场景二:已在阿里云操作系统控制台管理实例
阿里云操作系统控制台已集成 SysOM 诊断 Skill,开箱即用:登录阿里云操作系统控制台 → 选中想诊断的 ECS/ACK 实例 → 在智能操作系统助手对话框里直接描述症状即可,例如「帮我诊断 Java 应用 CPU 一直跑到 90%」「这个 Pod 的 Java 进程内存一直涨,帮我看下」。Agent 会自动走进程定位与诊断流程。
操作系统控制台OSPilot:
++https://alinux.console.aliyun.com/sysom-ai/ops-assistant++
同时,你也可以到阿里云操作系统控制台系统诊断进行 Java 内存、Java GC 分析诊断,或到系统热点栏进行 Java 进程热点分析。
阿里云操作系统控制台 Java 诊断:
++https://help.aliyun.com/zh/alinux/memory-panorama-analysis-function-instructions++
阿里云操作系统控制台 Java 热点分析:
++https://help.aliyun.com/zh/alinux/process-hotspot-tracking++
部署前提
JDK 支持范围:JDK 8 / 11 / 17(JDK 8 无法动态开 JFR 时自动回退到 GC 日志采集)。JFR 增量采集使用默认配置,运行时开销约 1%。纳管要求:CPU热点分析功能,实例需已纳管到阿里云操作系统控制,未纳管或 Agent 离线时 Skill 会给出清晰的接入引导。