【问题标题】:jvm heap resize when -Xmx and -Xms are the same though当 -Xmx 和 -Xms 相同时 jvm 堆调整大小
【发布时间】:2011-09-03 02:27:57
【问题描述】:

我有一个独立的 java 应用程序,它的 jvm 参数是:

-Xmx2g -Xms2g -Xmn1g -XX:PermSize=96m -XX:+DisableExplicitGC 
-XX:+UseFastAccessorMethods  -XX:+UseParallelGC -XX:+UseParallelOldGC 
-XX:MaxTenuringThreshold=63 -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true

正如我们所见,-Xmx 和 -Xms 都是 2g,但我发现堆大小总是会调整一点:

红线代表总堆大小,蓝线代表已使用 我认为红线应该是直的,但事实并非如此。 但在另一个 web 应用程序中,jvm 参数是:

-Xmx2g -Xms2g -Xmn512m -XX:PermSize=196m -Xss256k -XX:+DisableExplicitGC 
-XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled 
-XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m 
-XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly 
-XX:CMSInitiatingOccupancyFraction=70 -XX:-ReduceInitialCardMarks 
-Djava.awt.headless=true -Djava.net.preferIPv4Stack=true

它的可视堆使用图是:

总堆大小正好2g,红线水平稳定,我觉得应该是这样。

这两个app的主要区别是使用的GC策略,一个是parallel GC,一个是CMS。 GC 策略对堆空间大小的调整有影响吗?或者 -Xmn 参数对堆调整大小有一些我不知道的影响?

【问题讨论】:

    标签: jvm resize heap-memory


    【解决方案1】:

    并行 GC 通过称为 GC 人体工程学的东西来做一些技巧,尝试在运行时调整内部堆大小(OLD、new、perm 等),以帮助实现肉类吞吐量或延迟目标。

    监控工具可能不希望看到堆的某些部分调整大小,而是直接报告这些调整大小而不是对其进行平滑处理。

    【讨论】:

      猜你喜欢
      • 2013-04-11
      • 2012-08-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      相关资源
      最近更新 更多