当前位置:

首页 > 编程开发 > 怎么分析 JVM 的 MetaSpace 堆外泄露排查:通过 jcmd VM.metaspace 追踪类元数据

怎么分析 JVM 的 MetaSpace 堆外泄露排查:通过 jcmd VM.metaspace 追踪类元数据

怎么分析 JVM 的 MetaSpace 堆外泄露排查:通过 jcmd VM.metaspace 追踪类元数据 直接看 jcmd VM.metaspace 输出是否可信 答案是:不可信。这里有个常见的理解误区。这个命令展示的,仅仅是当前已加载类的元数据内存用量。它看不见那些已经卸载、但还没被 Met

本文目录

    怎么分析 JVM 的 MetaSpace 堆外泄露排查:通过 jcmd VM.metaspace 追踪类元数据

    怎么分析 JVM 的 MetaSpace 堆外泄露排查:通过 jcmd VM.metaspace 追踪类元数据

    直接看 jcmd VM.metaspace 输出是否可信

    答案是:不可信。这里有个常见的理解误区。这个命令展示的,仅仅是当前已加载类的元数据内存用量。它看不见那些已经卸载、但还没被 Metaspace 内部回收的“残留块”,更统计不到 Native 层通过 mmap 分配、却未归还给 Metaspace 管理的内存。所以,你看到 used 显示 256MB、committed 显示 384MB,并不代表真实的堆外内存增长就到此为止了。

    一个典型的误判场景是:MetaspaceSize 参数设置得太小(比如沿用默认的 21807104 字节,约 20.8MB),导致频繁触发扩容和内存碎片化。这时 jcmd 可能会显示 committed 持续上涨,但 used 却基本不动——这其实是 Metaspace 自身的管理开销在增加,并非真正的内存泄漏,却很容易被当成问题的根源。

    jcmd VM.metaspace 要结合 -XX:NativeMemoryTracking=detail 一起用

    单独运行 jcmd pid VM.metaspace,视野是受限的。它只能看到类元数据这一层的汇总情况,无法透视底层内存是通过 mmap 还是 brk 分配的,也无从知晓 ClassLoader 是否因为被引用而无法卸载。

    正确的做法是:

    • 务必加上 JVM 参数:-XX:NativeMemoryTracking=detail,然后重启应用。
    • 再执行命令:jcmd pid VM.native_memory summary scale=MB,重点关注 Metaspace 和 Internal 这两栏。
    • 如果发现 Metaspace 栏增长缓慢,但 Internal 栏却在持续上涨(尤其是伴随着大量 64MB 大小的匿名映射出现),那基本可以排除纯 Ja va 类加载导致的泄漏,问题很可能指向了 Native 层,比如 JNI 调用、Netty 的 Unsafe 操作,或者某些 JDBC 驱动。

    查 Metaspace 泄漏,真正要盯的是 ClassLoader 生命周期

    这里有个核心逻辑需要厘清:Metaspace 本身并不会“泄漏”,真正会“泄漏”的,是那些无法被垃圾回收(GC)的 ClassLoader。只要一个 ClassLoader 还活着,由它加载的所有类的元数据就会一直占据着 Metaspace 的空间。

    导致 ClassLoader 无法回收的典型原因有哪些呢?

    • Web 应用热部署时,旧的 WebAppClassLoader 被新实例替换,但线程池、定时任务或某些静态缓存里,还残留着对旧 loader 的引用。
    • 代码中使用了 ThreadLocal 或缓存了 Class.forName(“xxx”) 返回的 Class 对象,并且没有及时清理。
    • 某些第三方 SDK(比如一些老版本的 Druid、Logback)在 shutdown 时,没有正确释放其内部的 ClassLoader。

    如何验证?可以使用 jcmd pid VM.class_hierarchy -all 来查看活跃的 ClassLoader 数量;或者,对堆内存进行 dump,然后用 MAT 等工具检查 ja va.lang.ClassLoader 的实例数量,看它是否随着请求量增加而线性增长。

    pmap -x 和 /proc//smaps 是绕过 JVM 层的底线手段

    当 jcmd VM.metaspace 和 native_memory 都显示一切正常,但物理内存(RSS)却持续上涨时,就必须跳出 JVM 的视角,直接去操作系统层面检查内存映射了。

    需要关注的关键信号包括:

    • 执行 pmap -x | grep “64M\|128M”,如果出现大量相同大小的匿名映射(anon),并且这些地址段不在 jcmd VM.native_memory 的报告范围内,那就非常可疑。
    • 运行命令 grep -i “mmap” /proc//smaps | awk ‘{sum += $2} END {print sum/1024/1024 “ GB”}’,如果计算结果远超过 jcmd 中 Internal + Metaspace 的总和,也说明有“账外”内存。
    • 这类内存通常来源于 Netty 的 PooledByteBufAllocator、JDBC 驱动的 native buffer,或者自定义的 JNI 库——它们完全游离于 Metaspace 的管理体系之外。

    说到底,Metaspace 只管类的定义信息,管不了字节码加载器背后的 native buffer、direct memory,甚至是 mmap 文件映射。真要定位到根因,得从这些 64MB 内存块所在的 mmapped file 或 heap 标签反推调用栈,而不是一直盯着 VM.metaspace 的输出反复刷新。这才是关键所在。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    扎克伯格承诺Meta今年不会再裁员:未来可能更艰难
    扎克伯格承诺Meta今年不会再裁员:未来可能更艰难

    Meta多轮裁员致员工士气降至冰点,上月裁员约8000人。幸存员工被迫承担AI训练杂活,对CEO扎克伯格提出的黑客松活动反应冷淡。扎克伯格承诺今年不再裁员,但承认可能犯更多错误。

    Meta 士气跌至历史冰点,高管承认管理失误并推零食福利试图挽回
    Meta 士气跌至历史冰点,高管承认管理失误并推零食福利试图挽回

    Meta首席技术官承认员工士气跌至历史最低点,源于AI转型中裁员8000人及强制调派员工从事枯燥数据标注。管理层致歉并推出涨零食预算、限制管理幅度等福利,但外界对效果持保留态度。

    Meta 新 AI 团队已在内部交付首批关键模型
    Meta 新 AI 团队已在内部交付首批关键模型

    Meta新AI团队MSL成立不到半年,已完成首批核心模型内部交付并进入测试阶段,涵盖文本与图像处理能力。工程化落地仍是难点,公司已重组架构、引进人才并集中资源,计划2026至2027年推出搭载自主AI的终端产品,包括Ray-BanDisplay智能眼镜,目前暂停海外铺货以保障美国订单。

    Meta推出60美元不锈钢快充底座为智能眼镜充电
    Meta推出60美元不锈钢快充底座为智能眼镜充电

    Meta推出一款60美元不锈钢充电底座,专为雷朋联名款及OakleyMetaHSTN智能眼镜设计,但不支持雷朋Display。底座重108克,支持20分钟充至50%、一小时充满,采用USB-C接口但需自备充电线,主打随手一放的便捷体验。

    Meta收回工程师强制调入AI团队指令,承认重组存在决策失误
    Meta收回工程师强制调入AI团队指令,承认重组存在决策失误

    Meta收回强制工程师加入AI团队的指令,承认重组存在失误。此前调动7000名员工,现改为尊重个人选择,并给予调岗优先安置权。员工曾抱怨工作类似数据标注,士气跌至近二十年最低。

    AI早报 |豆包大模型2.1 Pro正式发布;Meta推出299美元智能眼镜新系列Meta
    AI早报 |豆包大模型2.1 Pro正式发布;Meta推出299美元智能眼镜新系列Meta

    豆包大模型2.1Pro正式发布,多项基准测试接近GPT-5.5等水平,日均Tokens调用量达180万亿。Meta推出299美元智能眼镜新系列。甲骨文上财年裁员约2.1万人,部分岗位被AI取代。高通拟40亿美元收购AI芯片初创公司Modular。

    Meta因数据安全问题暂停一项训练AI的内部计划
    Meta因数据安全问题暂停一项训练AI的内部计划

    Meta公司近日暂停了一项内部计划,该计划原拟通过追踪员工鼠标移动及数字活动来训练AI模型,但由于存在数据安全漏洞——敏感数据可被所有员工访问,已承认正就此展开调查,但未透露暂停将持续多久。

    Meta收紧内部AI工具使用政策 害怕蒸馏进自家产品
    Meta收紧内部AI工具使用政策 害怕蒸馏进自家产品

    Meta公司今年五月发布内部指南,严格禁止工程师使用Anthropic的ClaudeCode和OpenAI的Codex等外部AI工具生成编程挑战、分析安全漏洞或测试自家模型,以防模型蒸馏引发法律纠纷与事态升级。

    Meta 利用自研芯片在新服务器中重复使用旧 DDR4 内存
    Meta 利用自研芯片在新服务器中重复使用旧 DDR4 内存

    Meta公司自主研发的Vistara定制芯片,利用CXL2.0和PCIeGen5接口,将退役服务器中的DDR4内存接入新一代DDR5服务器,从而延长硬件使用寿命、降低资本支出。这一方案计划部署于超大规模AI数据中心,有效缓解内存资源紧缺与浪费问题。

    Meta被曝使用AI取代人工审核员 大模型已接管50%请求
    Meta被曝使用AI取代人工审核员 大模型已接管50%请求

    Meta正用大语言模型替代人工内容审核,已接管约50%的审核请求,每年可节省数十亿美元。计划年底进一步减少人工参与,部分内容的人工审核比例可能削减超90%。同时扎克伯格投入巨资开发个人超级智能技术。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。