sunjava-1.6.0_21
运行服务器应用程序。-Xmx16384M
和-Xms16384M
。 13969522688
15271002112
3031718040
Used=10426MB Max=10922MB
Used/Max=95%
旧的用法 - 我已经确认这是由于实际数据而且预计不会免费。 我的问题是,默认情况下JVM调整堆空间大小(它分配了10922MB旧版本),这在旧版本部分留下了很少的可用空间。
newratio
,并尝试增加旧版本的可用空间或任何其他方式我应该调整应用程序。 答案 0 :(得分:3)
旧版本的可用空间是否会影响应用程序?
如果你的Tenured Gen已经满员,那么将会发生一个重要的收藏,这种类型的收藏成本很高。
您可以使用以下选项:-verbose:gc
和-XX:+PrintGCDetails
来了解Full GC是否经常发生。如果是这样的话,它可能会影响您的应用程序的性能。
如果是,我应该如何处理?我应该尝试像newratio这样的JVM调整参数,并尝试增加旧版本的可用空间或任何其他方式我应该调整应用程序。
你可以尝试一下NewRatio,但要记住,如果你的伊甸园太短,你的天赋可能会更快填满。
总而言之,您应该使用监视工具来更好地了解必须使用的VM选项。它将很容易地向您展示在应用程序执行期间如何填充您的世代,它比gc日志更容易阅读和理解;)
答案 1 :(得分:2)
如果您知道对象的生命长度是长时间使用参数设置区域相对于彼此的大小。
您可以在young generation
和old generation
(伊甸园和空间)以及幸存者中设置比率。
目标是通过允许次要垃圾收集释放所有内存来最小化完整垃圾收集。
通过在应用程序中保持对象可访问,可以防止垃圾收集释放对象。我的意思是你应该只关心那些被小垃圾收集删除的对象。
启用参数
-verbose:gc -Xloggc:/opt/tomcat/logs/gc.out -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
然后使用工具GCViewer,您可以看到在gc
中花费的时间以及删除的对象的数量(大小)。在一些有用的指标中。