【问题标题】:Peak memory usage does not go beyond a limit峰值内存使用不超过限制
【发布时间】:2012-04-09 22:24:32
【问题描述】:

我看到使用 -Xmx2g,峰值内存达到 1G 并进行主要收集(marksweep 收集器)。配合-Xmx3g,达到1.5G,做大合集。使用-Xmg4g,它达到2G并进行主要收集。但是,从这里开始,我尝试将最大内存增加到 6G、8G、12G,并且在峰值内存达到 2G 的所有时候都会进行主要收集。

如何让它使用超过2G?我没有遇到任何设置。 -Xms 在这里重要吗?对于那些 -Xmx,我将 -Xms 设为 -Xmx 的一半。

我正在使用 Jetty,Java 1.6.024。

更新: 是的,我使用的是 64 位 JVM。 我使用的 JVM 选项是:-Xmx6g -Xms3g -XX:MaxPermSize=256m 我确定峰值内存的方法是查看 JConsole 中的内存图。它达到2G并下降(主要收藏)。老一代达到 1.5G 最大值,然后发生掉线。

谢谢, 婴儿车。

【问题讨论】:

  • 假设您使用的是 64 位 JVM 是否合理?值得一问,因为 32 位 JVM 内置了 2GB 的大小限制。
  • 我认为可以肯定地说它是一个 64 位 JVM,因为如果您指定的堆大小远大于 1500m(确切的限制取决于 JVM),Java 将在不运行程序的情况下终止.
  • 你尝试过使用 -XX 属性吗?
  • 你如何确定“内存峰值”?是来自 ps 还是通过 JMX?
  • 您好,如果您向我们提供了完整的命令行以准确查看您正在设置的选项,将会对您有所帮助。如果没有命令行,就无法确定您看到所看到行为的原因。并发标记扫描收集旨在最大限度地减少收集时的暂停,因此允许堆增长得更大可能与该目标背道而驰。默认情况下,它具有最大暂停时间以及对每一代的大小和 GC 边界的限制。大多数这种行为都可以调整以满足您的需求,但其中有很多因素。

标签: java memory-management garbage-collection jvm


【解决方案1】:

你有三个内存区域,伊甸园、幸存者和终身空间。

我怀疑正在发生的事情是,随着最大尺寸的增加,终身或伊甸园空间没有增长。

这两个区域很重要的原因是当tenured空间填满时会触发Full GC(我怀疑这个大小正在增长)当eden空间填满并且幸存者空间中没有足够的空间来复制所有剩余的对象时,也会触发一次full GC。

如果这是您的问题的原因,那么您正在创建大量中等寿命的对象,这可能是性能问题,除非您可以减少创建的数量。 另一种方法是指定一个更大的新大小,这会增加伊甸园的大小。

试试-mx12g -XX:NewSize=10g - verbosegc

最后一个选项将在清理时为您提供各个空间的大小。

【讨论】:

  • 彼得,感谢您的回答。我有一个后续问题。我们的一个对象的保留大小约为 4MB。我们每分钟创建一个这样的对象,并将其替换为静态 ConcurrentHashMap 中前一分钟的对象。据我所知,这是最大的对象。当然还有很多其他 String 对象和其他临时对象,但它们都远小于 4MB。这对于 3G 的伊甸园空间来说是否太大了?因为当我使用 6G 时,我尝试将 NewRatio 设为 1,但这并没有帮助峰值使用量超过 2G。谢谢。
  • 大对象直接分配到tenured空间。如果你有一个实际上由许多小对象组成的对象,那么它们应该被分配到伊甸园空间。对于这样的大件物品,如果可以的话,最好还是自己回收利用。
  • 将 NewSize 设置为大尺寸有助于达到更高的峰值内存对象。谢谢。我会让你知道我的配置和我们创建的对象的一些细节。并会问一个问题(在下一条评论中)。分析器指出 2 个地方消耗大量内存: 1) 每秒创建大约 5 个字符串(每个 110KB)。 2)每分钟创建一个包含4个对象(单个类)的对象,并替换为静态并发hashmap(因此map在任何时候都只包含1个对象)。这 4 个对象中的每一个都包含 10K 数组列表、10K 日期和其他字符串等。
  • 继续我之前的评论.. -Xmx6g -Xms3g -XX:MaxPermSize=256m 在#1 中,对我们创建的每个字符串执行替换操作。在 #2 中,父对象的保留大小为 3.5MB,但不包含除这 4 个对象之外的任何内容,这 4 个对象又包含 10K 的其他集合和对象。行为是内存使用量不断增加,并且在某一时刻主要收集(2GB)发生。次要收集(700MB)也大约每分钟发生一次。问题:您是否认为#1 实际上导致伊甸园空间已满,而将#2 中的对象推入任期空间也是如此?谢谢。
  • 这是可能的。当您尝试我建议的选项时,您会看到什么?
猜你喜欢
  • 2012-11-11
  • 1970-01-01
  • 2016-06-12
  • 2012-12-30
  • 1970-01-01
  • 2023-03-15
  • 2023-04-03
  • 1970-01-01
  • 2014-12-01
相关资源
最近更新 更多