问题标签 [heap-dump]

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 投票
3 回答
13864 浏览

java - heapdump 大小与 hprof 大小

当我的 jboss 服务器运行 xms 为 4096m 和 xmx 为 4096m 以及 permsize 为 512m 时,我最近以 hprof 格式进行了 heapdump。

生成的 hprof 文件超过 5gb。当我在 visualvm、mat 分析器或 yourkit 中加载堆转储时,我只看到大约 1gb 的总字节。我已尝试更改 yourkit 中的可达性范围,但它显示的大小不超过 1 GB。

知道文件大小与显示的堆转储大小的巨大差异会导致什么吗?

ps:我用的是jdk1.6.0_23

不幸的是,我不允许在这里提交屏幕截图。

在文件系统上,hprof 大小为 5.227.659 kb,在 yourkit 中它指出:

对象:9.738.282 / 浅层大小 740 mb / 保留大小:740 mb 其中可到达的字符串:6.652.515 (68%) / 浅层大小:381 mb (51%) / 保留大小:381 MB (51%)

最大保留大小是 206.810.176 的 byte[]

0 投票
4 回答
17587 浏览

java - 如何使用 kill -3 每 30 秒进行一次 jave 堆转储命令

请帮忙,我想运行一个shell脚本,它应该使用kill -3命令每30秒进行一次jave堆转储。提前致谢。

0 投票
3 回答
3191 浏览

java - 在java中检测堆转储中的根本原因

在 java 堆转储中,我如何确切知道代码中的哪个位置/哪个线程导致了转储?

0 投票
2 回答
2064 浏览

java - 线程被锁定在“www.protocol.http.HttpURLConnection”

我的线程在调用时被锁定

线程转储的一部分是:

似乎被锁定在

最后堆细节说,

线程不会在不抛出任何异常的情况下继续进行。

首先,我打算改变-XX:MaxPermSize. 还有什么我可以做的吗?

我敢肯定,人们一定遇到过这个例外。

提前致谢。

0 投票
5 回答
13850 浏览

java - 从应用程序内创建堆转储,无需 HotSpotDiagnosticMXBean

如何在我的应用程序中创建堆转储,而不使用类 HotSpotDiagnosticMXBean。由于访问限制,java/rt.jar我无法使用对HotSpotDiagnosticMXBean. 我知道如何解决 eclipse.compiler 错误,但是如何为我的构建修复它?是否有替代方法以编程方式创建堆转储?

0 投票
7 回答
11612 浏览

java - 是否可以从 hprof 转储/堆转储中的线程中查看线程

我有一个大型(5GB)hprof 转储,由应用程序在OutOfMemoryError发生时创建。(使用 XX:HeapDumpOnOutOfMemoryError)。

不幸的是,发生此错误时没有收集任何日志。重新创建这将需要几个小时。我希望某些工具可以显示来自 hprof 的异常堆栈跟踪或所有线程堆栈等。

我目前正在使用MAT,看不到获取线程信息的方法。我可以使用哪个工具?

(我不确定 hprof 文件是否有关于 OOM 发生时调用的线程/位置的信息)。

(我知道在正常情况下如何进行线程转储。这里的麻烦是事件已经发生了,我只有 hprof 转储。)

0 投票
2 回答
4773 浏览

jvm - Java 堆转储权限

在 Linux 机器(也很可能是 Unix 机器)中生成的 Java 堆转储具有访问限制。堆只能由进程的所有者读取(ACL 掩码设置为 600)。我了解这是出于安全原因。但是,我找不到任何引用或解释该行为的文档。谁能指出我的文档(如果有的话)?另外,有没有办法覆盖这种行为?

0 投票
5 回答
7857 浏览

java - 无需重新启动即可生成 Java 线程转储。

我想创建一个线程来跟踪内存使用情况和 cpu 使用情况。

如果应用程序达到高级别的,我想生成堆转储或线程转储。

有没有办法在不重新启动的情况下生成线程转储运行时?

0 投票
1 回答
692 浏览

android - 为什么Android在加载图像时分配的内存比需要的多

伙计们,我不认为这是重复的,也不是我如何避免OOM问题的其中之一。这是对知识的真正追求,所以请不要投反对票……

想象一下我有一个JPEG像素500x500。我将ARGB_8888其加载为“ bad as it gets”。

但是,我希望 Android 进行分配500x500x4 bytes = a little under 1MB,查看堆转储,您会发现 Android 分配的内存要多得多,通常是5-10大几倍。

您经常在这里看到有关OOMS的问题,其中堆栈跟踪显示 aheap request of say 15MB并且它总是比仅保存图像字节所需的大得多。OP 通常会收到一些反对票,然后被关于使用更少内存(感谢 Romain!)和扩展的股票答案和评论轰炸。我认为这里有很多东西。

有人知道这是为什么吗?

如果没有明显的答案,如果有帮助,我会整理一个SSCCE

PS。我认为JPEG与PNG等是无关紧要的,因为我们正在谈论支持位图的内存使用情况,它只是x乘以y乘以BPP - 还是我很慢?

0 投票
2 回答
345 浏览

java - Linux:Java Web 应用程序内存不足,不响应请求但不抛出 OOM?

在 Linux 服务器上,已为应用程序指定了 vm 参数(Xmx=3GB,Xms=3GB)。通过查看堆转储可以看出已使用超过 2.9 GB 的内存。32 MB 内存用于无法访问的对象。

但是应用程序没有抛出 OOM,而是停止响应。因此有必要手动重新启动应用程序。

我可以看到许多线程(96)等待堆栈跟踪中某个特定对象的监视器。这有帮助吗?此外,2.9 GB 的大部分空间都被缓存对象占用,我认为这很正常。MAT 仅将这些缓存对象显示为泄漏嫌疑人。

试图通过查看堆转储和堆栈跟踪来找出导致它没有响应但没有看到任何特别之处的原因。