问题标签 [jhat]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
12 回答
150871 浏览

java - 如何查找 Java 内存泄漏

如何在 Java 中找到内存泄漏(例如,使用 JHat)?我试图在 JHat 中加载堆转储以进行基本查看。但是,我不明白我应该如何找到根引用(ref)或任何它被称为的东西。基本上,我可以说有几百兆字节的哈希表条目([java.util.HashMap$Entry 或类似的东西),但地图到处都在使用......有什么方法可以搜索大地图,或者也许找到大对象树的一般根?

[编辑] 好的,到目前为止我已经阅读了答案,但我只是说我是一个便宜的混蛋(这意味着我对学习如何使用 JHat 比为 JProfiler 付费更感兴趣)。此外,JHat 始终可用,因为它是 JDK 的一部分。当然,除非 JHat 除了蛮力之外别无他法,但我不敢相信会是这样。

此外,我认为我无法实际修改(添加所有地图大小的日志记录)并运行它足够长的时间让我注意到泄漏。

0 投票
2 回答
2409 浏览

java - 为什么 jhat 的 -baseline 选项不起作用?

为什么每个对象似乎都被标记为新对象,而不仅仅是第二个快照中的对象,而不是我的基线快照中的对象?在网上环顾四周,我看到一些建议我需要使用 hprof 而不是 jmap 来进行内存转储,但似乎 hprof 以完全相同的格式生成转储。

这是 JDK 1.6.0_14;我在 Windows 和 UNIX 上都试过了。

0 投票
2 回答
35182 浏览

java - 类class[B在Java中代表什么?

我在这里尝试了一个工具 jhat 来测试我的 java 内存使用情况。它读入一个堆转储文件并将信息打印为 html。但是,表格显示如下:

那些 [B [C 等类是什么?

0 投票
2 回答
2877 浏览

java - 仅在堆转储中查找新对象的 OQL?

有谁知道仅在堆输出中查找新对象的 OQL 语法?我找不到关于 OQL 选项的好的文档,sun 甚至有一个仅新输出的示例,没有生成它的查询的示例语法。我所做的是

  • 使用 jhat 创建了一组堆
  • 使用 jmap -baseline 为它们提供服务,它将不在两个堆中的对象标记为“新”。
  • 浏览 jhat
  • 抓头
0 投票
4 回答
27785 浏览

java - 将大型 hprof 加载到 jhat

我有一个 64 位 JVM 使用该-XX:-HeapDumpOnOutOfMemoryError选项转储的 6.5GB Hprof 文件。我把它放在一台 16GB 的 64 位机器上,并试图将它放入 jhat,但它总是内存不足。我曾尝试传入 jvm args 以获得最小设置,但它拒绝任何最小值,并且似乎在达到最大值之前内存不足。

内存不足的 jvm 会转储一个如此大的堆,以至于无法将其加载到具有两倍内存的盒子上,这似乎有点愚蠢。有没有办法让这个运行,或者可能摊销分析?

0 投票
1 回答
3615 浏览

java - OQL 查询以查找从会话中引用的给定类的所有实例和子实例

我正在尝试使用 jhat/OQL 来跟踪我们的 Tomcat 容器中的内存泄漏。我想问的问题是:

“向我展示可从 javax.servlet.http.HttpSession 访问的 foo.bar.Cacheable 类的所有实例(和子实例)”

我设法想出了以下内容,但这没有显示foo.bar.Cacheable的子类(这很重要,因为这实际上是一个接口)。

我尝试了以下概念的各种排列,但不断收到错误(未定义“foo”)。

谁能帮我解决我在通过 OQL 提出这个问题时做错了什么?

0 投票
3 回答
6374 浏览

java - 如何使用 jhat 分析堆转储

我在堆转储上运行了 jhat,它生成了报告。我如何使用报告来分析堆。除了实例计数之外,我无法完全理解。有没有这方面的参考资料或案例研究。简而言之,我需要继续前进,我该怎么做?

还有什么是对象查询语言。

0 投票
1 回答
97 浏览

memory-management - 是否有任何用于生产应用的基本 gc 生成大小和比率

年轻代的初始大小应该是多少?-XX:+NewRatio 应该是多少?-XX:+生存率?perm 和 old generation 的比例应该是多少?

0 投票
3 回答
1454 浏览

java - 识别未收集垃圾的对象的更好方法?

简而言之

我有一个程序随着时间的推移逐渐使用越来越多的内存。我正在使用 jmap 和 jhat 来尝试诊断它,但还没有完全到位。

背景

该程序是一个长期运行的服务器,由一个 hbase 数据存储支持,为一堆其他东西提供节俭服务。但是,运行几天后,它最终会达到分配的堆限制,并且几乎所有时间都花在垃圾收集上。似乎引用在某处保留了很多数据

到目前为止我所做的

在摆弄了一些 jstat 和 jconsole 之后,我最终使用正在运行的进程的 jmap 进行 heapdumps,并通过 jhat 运行它,并且简单的数字加起来不会接近内存利用率

jmap -F -dump:live,format=b,file=heap.dump 12765

jmap -F -dump:format=b,file=heap.all 12765

直方图顶部的一些东西

虽然这里的总数没有加起来,但在进行堆转储时,该进程使用了​​超过 1gb 的内存。

直接明显的罪魁祸首似乎是我将 HBase Result 和 KeyValue 条目留在了整个地方。试图追踪参考资料,我最终击中了

需要帮助:

似乎没有引用这个最终的 HBaseCLient$Call 对象(或任何其他类似的对象,每个对象都包含一千个左右的键值及其所有内部数据)。它不应该得到GCed吗?我是否只是误解了 gc 的工作原理或 jhat 将在多大程度上验证引用?如果是这样,我还能做些什么来追踪我的“丢失”记忆?我可以采取哪些其他步骤来追踪这一点?

0 投票
2 回答
2532 浏览

java - JHAT 无法分析内存转储

我有一个内存转储文件,JHAT 给出以下消息,我无法分析任何内容(因为没有显示数据。

这是否意味着 hprof 文件不完整或损坏?


-XX:+HeapDumpOnOutOfMemoryError" 在我的 tomcat 中使用选项。