我正在运行Apache Ignite应用程序。当我看到使用linux的内存使用空闲
时,我得到的使用内存为9.8GB。但是当我使用eclipse MAT进行堆转储时,它的大小只有大约1.8GB。为什么会这样?ignite中分配的默认堆内存为21 GB。我也没有做任何GC调优。
当Eclipse接受堆转储时,它很可能强制执行完全垃圾收集,以便您只看到实际位于内存中的对象。JVM本身不会这样做,因为堆非常大,而且还有大量可用内存。顺便说一句,这种情况最终会使您的Ignite节点在很长一段时间内没有响应。我建议每个节点的分配不要超过10-12GB。
问题内容: 对于我的应用程序,Java进程使用的内存远远大于堆大小。 容器运行所在的系统开始出现内存问题,因为容器占用的内存比堆大小大得多。 堆大小设置为128 MB(-),而容器最多占用1GB的内存。正常情况下需要500MB。如果docker容器的限制低于(例如),则该进程将被操作系统的内存不足杀手杀死。 你能解释一下为什么Java进程使用的内存比堆多得多吗?如何正确调整Docker内存限制的大
问题内容: 我需要一种 从应用程序内部 请求堆转储 的方法 。 基本原理:当遇到特定的错误情况时,我想转储堆,以便可以看到内存中有什么内容。 但是我想使它自动化(例如,当我检测到某些特定情况发生时。或者当看门狗不再收到ping命令时;当某些测试失败时)。因此,我需要一种从应用程序本身内部转储堆的方法。我似乎无法通过MX bean的东西找到它。尽管MX Bean可以通过监视器和“可拥有的同步器”信息
我有一个非常奇怪的问题。我有一个30 GB的堆转储,我想在我的笔记本电脑上分析相同的(它有8 GB的内存)。我试着用MAT和IBM堆分析器这样做,但是根据他们的建议,Xmx大小应该超过转储大小。我也试着用MAT的文件分析堆转储,但是收到内存错误。 关于如何成功分析笔记本电脑上的垃圾,有什么建议吗? 提前谢谢!
问题内容: 我们正试图在我们的Web应用程序中找到导致大量内存泄漏的元凶。我们在发现内存泄漏方面经验有限,但是我们发现了如何使用Eclipse MAT进行Java堆转储并对其进行分析。 但是,对于我们使用56 / 60GB内存的应用程序,堆转储的大小仅为16GB,而在Eclipse MAT中则更少。 语境 我们的服务器将Ubuntu 14.04上的Wildfly 8.2.0用于我们的Java应用程
我们正试图找到web应用程序中大内存泄漏的罪魁祸首。我们在查找内存泄漏方面的经验相当有限,但我们了解了如何使用创建java堆转储,并在Eclipse mat中对其进行分析。 但是,由于我们的应用程序使用56/60GB内存,堆转储的大小只有16GB,在Eclipse mat中就更少了。 对于我们的java应用程序,我们的服务器使用Ubuntu14.04上的Wildfly8.2.0,其进程使用了95%
问题内容: 我有Java应用程序,不幸的是,它在一段时间后开始消耗大量内存。使事情复杂化的是,它不仅是Java应用程序,还是JavaFX 2应用程序。 我怀疑可能存在一些内存泄漏,甚至在底层JavaFX调用和本机库中也是如此。 理想的解决方案是在某个时刻获取所有java对象的转储(及其内存使用情况),然后分析该转储。有什么办法可以做到这一点? 问题答案: 有很多方法可以获取堆转储,从简单的工具(例