0

0

如何使用JProfiler监控Java程序_JVM内存泄露分析环境搭建

P粉602998670

P粉602998670

发布时间:2026-03-11 11:15:32

|

543人浏览过

|

来源于php中文网

原创

最稳方式是用jps -l或ps aux | grep java查pid,再在jprofiler中选session → connect to running vm手动填pid;需确保jvm未禁用attach、用户权限一致、docker加--cap-add=sys_ptrace并挂载/proc。

如何使用jprofiler监控java程序_jvm内存泄露分析环境搭建

怎么启动 JProfiler 连接本地正在运行的 Java 进程

JProfiler 不能直接“看到”所有 Java 进程,尤其当进程以 java -jar 或 systemd、Docker 方式启动时,jps 可能查不到,JProfiler GUI 列表里就为空。

最稳的方式是:先用 jps -lps aux | grep java 找到目标进程 PID,再在 JProfiler 中选 Session → Connect to Running VM,手动填 PID —— 注意不是进程名,是纯数字 ID。

常见错误现象:Cannot connect to VM: Connection refused,大概率是目标 JVM 启动时没开 JMX 或没加 -Dcom.sun.management.jmxremote 参数;但 JProfiler 用的是 JVMTI 协议,不依赖 JMX,所以只要 JVM 是 HotSpot 且未禁用 attach(比如加了 -XX:+DisableAttachMechanism),就能连上。

  • Linux/macOS 下,确保当前用户和 Java 进程属同一用户(否则 attach 失败)
  • 如果进程由 sudo 启动,JProfiler 也得用 sudo 启动,否则权限不足
  • Docker 容器内 Java 进程默认无法被宿主机 JProfiler attach,需加 --cap-add=SYS_PTRACE 并挂载 /proc

为什么 heap walker 查不到“泄露对象”,但内存持续上涨

不是所有内存增长都叫“泄露”。JProfiler 的 Heap Walker 显示的是“可达对象”,而真正泄露往往藏在弱引用、软引用、线程局部变量或 Native 内存里 —— 这些区域 Heap Walker 不统计。

立即学习Java免费学习笔记(深入)”;

典型场景:用了 ThreadLocal 存大对象,线程池长期复用线程,ThreadLocalMap 里的 Entry 没被清理;或者用了 JNI 库(如图像处理、加密),Native 堆分配未释放。

Moshi Chat
Moshi Chat

法国AI实验室Kyutai推出的端到端实时多模态AI语音模型,具备听、说、看的能力,不仅可以实时收听,还能进行自然对话。

下载

实操建议:

  • 先切到 Live Memory → Record allocations,跑一段时间后 dump,看哪些类实例数/总大小异常增长
  • 打开 Biggest Objects 视图,按 retained size 排序,重点看是不是某个 Map、List 或缓存容器占了 80%+ 内存
  • 右键可疑对象 → Show Nearest GC Root,确认是不是被静态字段、线程、ClassLoader 持有住
  • 若怀疑 Native 内存,用 Monitor → Native Memory Tracking (NMT)(需 JVM 启动加 -XX:NativeMemoryTracking=detail

JProfiler 采样模式选 Allocation Recording 还是 Heap Walking

Allocation Recording 记录每次 new 对象的动作,开销大(约 15–25% CPU)、内存占用高,适合定位“谁在疯狂创建对象”;Heap Walking 是定时触发 full GC 后扫描堆快照,轻量但只能看到“此刻活着的对象”,漏掉已 GC 掉的短命对象。

性能影响很实在:线上环境绝对别开 Allocation Recording,连测试环境都建议只开 30–60 秒就停。Heap Walking 可常驻开启,每 5 分钟自动 dump 一次,配合告警更实用。

  • 排查内存缓慢泄漏:用 Heap Walking + 自动定时 dump,对比多个快照的 retained size 趋势
  • 排查 OOM 前的暴增:用 Allocation Recording,但必须提前设好触发条件(比如堆使用率达 85% 时自动开始)
  • 参数差异:Allocation Recording 支持过滤包名(如只录 com.example.cache.),Heap Walking 不支持实时过滤,得靠事后分析

为什么 dump 出来的 hprof 文件在 JProfiler 里打不开

不是所有 hprof 都兼容。JProfiler 只认 JVM 自己生成的 hprof(用 jmap -dump:format=b,file=xxx.hprof <pid></pid>),不支持 VisualVM、Eclipse MAT 或某些 APM 工具导出的变体格式。

更隐蔽的问题是:JVM 默认生成的 hprof 是“live objects only”,但 JProfiler 的 Heap Walker 需要完整堆镜像(含 unreachable 对象),否则 GC Roots 分析不准。必须加 -all 参数:jmap -dump:format=b,file=heap.hprof,all <pid></pid>

  • 错误信息示例:Unsupported hprof version 7 → 说明文件不是标准 JVM hprof,可能是其他工具生成
  • Linux 下用 file heap.hprof 看文件头,标准 hprof 开头是 JAVA PROFILE 1.0.2
  • JProfiler 9+ 支持直接打开 .jps 快照(它自己的格式),比 hprof 加载快、功能全,优先用它
JProfiler 的真实门槛不在安装,而在区分“内存增长”“内存泄漏”“Native 泄露”这三类问题的信号特征 —— 很多人卡在看到 retained size 上涨就认定是代码 bug,其实八成是线程池配置不当或 NIO Direct Buffer 没清理。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
eclipse教程
eclipse教程

php中文网为大家带来eclipse教程合集,eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。php中文网还为大家带来eclipse的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

194

2023.06.14

eclipse怎么设置中文
eclipse怎么设置中文

eclipse设置中文的方法:除了设置界面为中文外,你还可以为Eclipse添加中文插件,以便更好地支持中文编程。例如,你可以安装EBNF插件来支持中文变量名,或安装Chinese Helper来提供中文帮助文档。本专题为大家提供eclipse设置中文相关的各种文章、以及下载和课程。

806

2023.07.24

c语言编程软件有哪些
c语言编程软件有哪些

c语言编程软件有GCC、Clang、Microsoft Visual Studio、Eclipse、NetBeans、Dev-C++、Code::Blocks、KDevelop、Sublime Text和Atom。更多关于c语言编程软件的问题详情请看本专题的文章。php中文网欢迎大家前来学习。

623

2023.11.02

Eclipse版本号有哪些区别
Eclipse版本号有哪些区别

区别:1、Eclipse 3.x系列:Eclipse的早期版本,包括3.0、3.1、3.2等;2、Eclipse 4.x系列:Eclipse的最新版本,包括4.0、4.1、4.2等;3、Eclipse IDE for Java Developers等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

180

2024.02.23

eclipse和idea有什么区别
eclipse和idea有什么区别

eclipse和idea的区别:1、平台支持;2、内存占用;3、插件系统;4、智能代码提示;5、界面设计;6、调试功能;7、学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

152

2024.02.23

eclipse设置中文全教程
eclipse设置中文全教程

本专题整合了eclipse设置中文相关教程,阅读专题下面的文章了解更多详细操作。

116

2025.10.10

eclipse字体放大教程
eclipse字体放大教程

本专题整合了eclipse字体放大教程,阅读专题下面的文章了解更多详细内容。

154

2025.10.10

eclipse左边栏不见了解决方法
eclipse左边栏不见了解决方法

本专题整合了eclipse左边栏相关教程,阅读专题下面的文章了解更多详细内容。

120

2025.10.15

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.3万人学习

C# 教程
C# 教程

共94课时 | 11万人学习

Java 教程
Java 教程

共578课时 | 80万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号