问题标签 [eclipse-memory-analyzer]
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.
java - Java HeapDumps 表明在 OutOfMemory 异常后使用的堆大小比实际堆定义小 30%
在 JVM 引发异常后,我正在分析一些堆转储OutOfMemory
。我在 Windows 2008R2 平台上使用 Hotspot JDK 1.7(64 位)。应用服务器是一个 JBoss 4.2.1GA,通过 Tanuki Java Service Wrapper启动。
它使用以下参数启动:
翻译为:
-Xms1498m -Xmx3000m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError
还有一些其他的 GC & JMX 配置参数。
我的问题是,当我分析由于OutOfMemoryException
使用Eclipse Memory Analyzer而创建的堆转储时,MAT 总是向我显示 2.3G 或 2.4G 的堆大小。我已经在 MAT 中启用了该选项Keep Unreachable Objects
,所以我不相信 MAT 正在修剪堆。
或者
MAT总结:
我的实际堆文件大小约为 3300KB,因此它们符合我的 3000m 最大堆大小设置。
那么MAT中缺少的500-600M内存在哪里呢?为什么 MAT 只显示我的堆大小为 2.4G?
SO上的其他帖子倾向于表明它是JVM在转储堆之前进行了一些GC,但是如果缺少500M是由于GC,为什么它甚至首先抛出OOM?如果 GC 真的可以清理 500M(或者我的堆的近 25%),那么 JVM 真的内存不足吗?
有没有办法调整堆转储,以便我可以获得堆的完整/完整图片(包括丢失的 500M)?
如果不是,我发现我真的很难找到我首先遇到这些 OOM 的方式/原因。
根据某人的要求,我附上了jstat -gc <PID> 1000
来自活动节点的输出:http: //pastebin.com/07KMG1tr。
java - 哪个线程触发了 OutOfMemoryException 堆转储
我有一个在 JVM 7 上运行的 JBoss 4.2.1 应用程序,它在抛出时触发了堆转储OutOfMemoryExceptions
。我为 jvm 配置了以下开关:
我正在尝试通读堆转储以找出导致我的 OOME 的确切原因。我看到消耗了大块内存,但它们在某种程度上是意料之中的。我目前正在寻找的是“确凿证据”。
我已经在这里打开了另一个关于我的堆转储中缺少内存的 SO 问题,所以我试图弄清楚 OOME 发生时 JVM 在做什么。
堆转储中是否有任何内容表明哪个线程触发了 OOME?更具体地说,触发我的 OOME 的呼叫在做什么?我意识到并理解在内存泄漏的情况下,这可能是在追踪错误的线索,但我正在寻找是否看到哪个线程导致了异常。
反正有没有用MAT来看到这个?
android - 识别 Android 应用程序中的内存泄漏
我正在尝试使用 android studio 工具和 mat 来了解 android 应用程序中的内存泄漏。
我在运行应用程序时截取了 android studio 的屏幕截图,在单击 GC 按钮后截取了另一张截图。
现在,作为分析内存泄漏或使用 android studio 工具的初学者,我想了解下面的图表。
如何仅通过查看我的应用程序已泄漏内存的图表来确定?
在图 1 中 - 我打开我的应用程序并登陆 HomeScreen 去执行不同的活动(保存图像)然后返回。
在图 2 中 - 我点击了 GC 按钮。
我的应用程序是否泄漏内存?如果不是,我的步骤是否正确,或者是否有任何具体的步骤可以检查内存泄漏。
请帮忙,谢谢。
java - 为什么字节数组本身的gc根在mat中?
我有这种情况:当我分析android堆时,字节数组在MAT中被标记为gc root。我已经排除了对 gc root 的弱/软引用。截图如下:
这意味着字节数组是 gc 根?很难说服。
你能解释一下这个现象吗?
这与此处相同,但没有人解释它。
估计本机有对字节数组的引用,但是我没有足够的知识来解释。
java - 堆转储分析 - 查找 OutOfMemory 异常的根本原因
我正在运行一个应用程序,该应用程序具有 4 gigs 的最大堆大小-Xms4096m -Xmx4096m -Xmn1024m
,GC 配置为-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=50
,GC 间隔为Dsun.rmi.dgc.server.gcInterval=43200000 -Dsun.rmi.dgc.client.gcInterval=43200000
突然,我的应用程序出现内存不足异常,我在同一场合进行了线程转储和堆转储。在分析线程转储时,由于为 hashMap 和 arrayList 创建了一些值,线程被卡住了。ByteArrayOutStream 在其中一个线程中创建了锁。
在 Eclipse 内存分析器工具中的 Analyzing Heap dump 中,它清楚地表明 bytearray 对象已经占用了将近 1 Gigs 的 Heap。从 GCViewer 显示它在几分之一秒内有一个峰值。我不知道为什么突然字节数组对象使用了 1 Gigs 的空间。有人可以帮我缩小罪魁祸首。
-- 应用服务器 - Weblogic 12c
java - 给定 hashmap 的对象 id,获取 hashmap 中键的字段
我已将堆转储加载到地图中。我发现了带有泄漏对象的哈希图。如何获取该哈希图中的键字段?我怀疑我在地图中有同一个对象的多个副本,名称如 joseph_0001, joseph_0002, ..., joseph_WXYZ 。
到目前为止,我已经尝试了以下陈述。
我想要每个键的 displayName 字段。
请注意 MAT 的 OQL 规范(http://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.mat.ui.help%2Freference%2Foqlsyntax.html)与 VisualVM 不同。