标签: heap-dump

2
推荐指数
1
解决办法
8978
查看次数

我可以在进程关闭后打开自定义 hsperfdata_root/PID 吗?

我正在使用 docker 来容器化我的应用程序,并希望从主机查看它的性能。我已经映射了卷:“/opt/tmp/my_app/:/tmp”,其中包含 hsperfdata_root

  • 我可以在 jmap 或其他一些工具中以某种方式打开来自 hsperfdata_root/PID 的堆和其他信息吗?
  • 容器是否必须处于运行状态才能进行此类调试,否则可能会关闭?

java performance heap-dump docker

2
推荐指数
1
解决办法
2173
查看次数

分析java heapdumps:为什么枚举实例保存在堆中?

我一直在寻找我的应用程序中的内存泄漏和fhat与jhat,由于某种原因,枚举的实例保存在堆中.

为了模拟它,我已经在tomcat中部署了我的应用程序,稍微使用它,停止它并在tomcat上执行GC(通过jconsole).然后拿了一个heapdump发现了这个:

instance of x.mgbean.quote.Input$Tab@0xe0887c0 (16 bytes)
Class:
class x.mgbean.quote.Input$Tab
Instance data members:
name (L) : VEHICLE (24 bytes)
ordinal (I) : 0
References to this object:
java.util.HashMap$Entry@0xe15f7c0 (24 bytes) : field value
class x.mgbean.quote.Input$Tab (84 bytes) : static field VEHICLE
[Lx.mgbean.quote.Input$Tab;@0xe0887f0 (20 bytes) : Element 0 of  [Lx.mgbean.quote.Input$Tab;@0xe0887f0
[Lx.mgbean.quote.Input$Tab;@0xe1541e8 (20 bytes) : Element 0 of  [Lx.mgbean.quote.Input$Tab;@0xe1541e8
Run Code Online (Sandbox Code Playgroud)

知道怎么会这样吗?

java enums heap-memory heap-dump

1
推荐指数
1
解决办法
764
查看次数

Java Eclipse在断点上创建堆转储

如何在eclipse的断点创建一个dumpdump?

我的Java程序有2个版本,它们使用2种不同的方法来完成相同的任务。
其中一种方法遇到堆空间异常,而另一种则没有。

我可以通过设置VM参数-XX:+ HeapDumpOnOutOfMemoryError获得遇到错误的堆转储。

对于使用不会出错的方法的程序,我想在某个断点处获得一个堆转储。我怎样才能做到这一点?

java eclipse breakpoints heap-dump

1
推荐指数
1
解决办法
2680
查看次数

Java进程出现OutOfMemory错误时如何自动创建堆转储?

我的Java程序在Linux平台上运行,并且经常崩溃;在这种情况下,我希望自动进行heapdump。

Java进程在Linux上命中“ OutOfMemory Error”时,是否有人有脚本/方法自动创建堆转储?

多谢您的协助。

java linux jvm out-of-memory heap-dump

1
推荐指数
1
解决办法
2717
查看次数

JAVA-8中堆上的字符串对象数

从这个堆栈溢出的字符串对象数量,我开始知道如果我们做一些像:

String s = new String("ABC");
Run Code Online (Sandbox Code Playgroud)

然后我们objects在堆上有两个String,一个在constant池上"ABC",

但今天我拿了堆转储,发现堆上有两个objects它自己.我使用MAT工具同样请找到下面的屏幕截图.

在此输入图像描述

所以我的查询是,如果堆上有两个对象,其中一个Char[]用于String类,另一个用于常量池,那么这意味着

String s = new String("ABC") 将总共​​创建3个对象.

java string heap-dump java-8

1
推荐指数
2
解决办法
553
查看次数

解释来自jboss实例的GC日志

生产中存在内存泄漏,GC日志低于此.很明显,你可以看到它是一个问题.但是,我无法获得堆转储,因为当我们发现它的问题已经太晚并且堆转储失败时(即使使用-F force选项).所以我试图找到一种方法来了解它何时会下降所以我可以进行堆转储.从这些日志中我能看到什么东西向我展示它几乎即将下降?谢谢!

Desired survivor size 134217728 bytes, new threshold 19 (max 31)


2430254K->1903326K(2490368K), 0.1973860 secs]
235738.331: [GC
Desired survivor size 134217728 bytes, new threshold 18 (max 31)
 2427614K->1901667K(2490368K), 0.1901241 secs]
235752.709: [GC
Desired survivor size 134217728 bytes, new threshold 17 (max 31)
 2425955K->1915547K(2490368K), 0.2188464 secs]
235761.054: [GC
Desired survivor size 134217728 bytes, new threshold 16 (max 31)
 2439835K->1908633K(2490368K), 0.2318097 secs]
235772.360: [GC
Desired survivor size 134217728 bytes, new threshold 15 (max 31)
 2432921K->1911872K(2490368K), 0.2773868 secs]
235785.063: [GC-- 2436160K->2479951K(2490368K), 1.1930829 secs] …
Run Code Online (Sandbox Code Playgroud)

java jboss garbage-collection heap-dump

0
推荐指数
1
解决办法
1543
查看次数

如何在JVM崩溃后创建堆转储文件

当JVM崩溃时,将在工作目录中创建堆转储文件(hs_err_pidXXXX.log).我想知道谁创建了这个文件.JVM崩溃意味着它已异常终止.所以它肯定不会创建这个文件.那么这个文件是如何创建的?

我们也可以控制此文件中显示的信息.如果我想在一个文件(hs_err_pidXXXX.log)中同时进行线程转储和堆转储,是否可能?如果有,怎么样?基本上我的优先事项是识别导致JVM崩溃并将其存储在创建的堆转储文件中的函数(或堆栈跟踪).

java jvm-crash heap-dump

0
推荐指数
1
解决办法
2642
查看次数

如何在无限循环中使用更少的堆空间?

我的java应用程序的内存使用有问题.具有堆空间和非堆空间.现在我专注于我的堆空间.

我的应用程序是一个SocketServer,它通过DataInputStream获取Input.我正在读取信息作为字节数组.我每秒得到一个不规则的输入量,但我们说的是每秒400字节到1.000字节的空间,峰值可以更高.

由于我的程序是一个服务器,它在无限循环中等待输入.现在我遇到了问题,我的堆空间随着时间的推移而攀升,所有5-10分钟它会上升0.5MB.

我使用了多个监视器应用程序,如jconsole和YourProfiler.之后,我试图在Heap Dumps的帮助下弄清楚,我用jmap进行了解析并使用Eclipse Memory Analyzer进行分析.

现在我的问题是,在这个示例代码中,哪个选项更好或更少使用更少的堆空间1或2?

选项1:

while (true){
byte [] one= new byte [21]; 
do something with one;
byte [] two= new byte [50];
do something with two;
byte [] three= new byte [30];
do something with three;
}
Run Code Online (Sandbox Code Playgroud)

选项2:

byte [] one;
byte [] two;
byte [] three;
while (true){
one= new byte [21]; 
do something with one;
two= new byte [50];
do something with two;
three= new byte [30];
do something with three;
}
Run Code Online (Sandbox Code Playgroud)

我不知道在循环中创建的三个对象会发生什么.这些应该是局部变量,只能在循环中可见和访问.但是在一个循环圈之后,JVM会删除它们并在下一个循环中创建一个新循环.所以我猜应该没有内存泄漏? …

java memory-leaks loops heap-memory heap-dump

0
推荐指数
1
解决办法
443
查看次数

我怎么知道用jmx在java堆中每一代的大小

jmap可以知道每一代的大小,但是我想实时监视我的java进程。

使用jmxMemoryMXBean.getHeapMemoryUsage().getUsed()可以获得总堆大小。但是我找不到任何获取方法:

  1. 新(年轻)一代和终身(老)一代的大小;
  2. 伊甸园和新生代中每个幸存者的大小。

garbage-collection jvm jmx heap-dump

0
推荐指数
1
解决办法
133
查看次数