内存耗尽Xmx和Xms

时间:2017-08-18 16:15:58

标签: java memory-management jconsole

我遇到了一个我编写的java应用程序的问题,导致了硬件性能问题。问题(我相当肯定)是,我运行应用程序的一些机器只有1GB的内存。当我启动我的Java应用程序时,我将堆大小设置为-Xms 512m -Xmx 1024m。

我的第一个问题是,我的假设是正确的,这显然会导致性能问题,因为我将所有机器内存分配给java堆?

这引出了另一个问题。我在应用程序上运行jconsole并监视应用程序内存使用情况。我所看到的是,该应用程序在启动时消耗大约30mb,大约150mb并且垃圾收集器运行并且它回落到30mb。我也看到在pid上使用top是应用程序从使用大约6%的内存开始然后慢慢爬升到大约20%。我不明白。当我为它分配1GB时,为什么它只能达到20%的内存使用量。不应该达到100%。此外,为什么它没有使用那么多内存(20%),因为它看起来应用程序使用的内存超过150mb?

我认为很明显我需要调整我的Xms和Xmx,这应该可以解决问题,但是我试图更好地理解究竟发生了什么。

1 个答案:

答案 0 :(得分:1)

内存使用的两种可能性:

您的应用只是没有使用那么多内存

或者

你的应用程序没有足够快地使用那么多内存。

会发生什么:

垃圾收集器有几个点可以执行:

  1. 刚安排:它将清理易于删除的对象

  2. 完整收集:当您达到设定的内存限制时会运行。

  3. 如果选项1(通常低得多的影响快速收集)可以控制内存使用,除非将JVM GC选项设置为按计划运行完整,否则它不会达到完整集合。

    使用您的应用程序,我将开始设置较低的xmx / xms值,以便为操作系统留出更多保证资源,并且可能会阻止某些分页。