内存耗尽了Xmx和Xms的一侧



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

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

这就引出了另一个问题。 我正在应用程序上运行 jconsole 并监控应用程序的内存使用情况。 我看到的是,该应用程序在启动时消耗大约 30mb,达到大约 150mb,垃圾收集器运行并回落到 30mb。 我还看到在 pid 上使用 top 的是,应用程序首先使用大约 6% 的内存,然后慢慢攀升到大约 20%。 我不明白这一点。 为什么当我为它分配 20GB 时,它只能获得高达 1% 的内存使用率。 不应该达到100%。 另外,当应用程序似乎使用不超过 150mb 时,为什么它使用那么多内存 (20%(?

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

内存使用的两种可能性:

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

你的应用使用内存的速度不够快。

发生什么:

垃圾回收器有几个执行点:

  1. 刚刚计划:它将清理容易删除对象

  2. 完整集合:当您达到设置的内存限制时,这将运行。

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

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

相关内容

  • 没有找到相关文章

最新更新