从Java 6升级时垃圾收集器的使用情况+;Tomcat6到Java8+;雄猫8

从Java 6升级时垃圾收集器的使用情况+;Tomcat6到Java8+;雄猫8,java,tomcat,garbage-collection,jvm,jvm-arguments,Java,Tomcat,Garbage Collection,Jvm,Jvm Arguments,我们正在从Java 6和Tomcat 6升级到Java 1.8.0_45和Tomcat 8.0.23,Linux服务器,64位。 我在比较内存使用情况,我面临着一种奇怪的行为 这是Eden Space在Tomcat 8中使用Java 8时的外观,没有流量,刚刚启动且处于空闲状态: 这就是Java 6的外观,对我来说是标准的: 两个JVM的配置方式基本相同: XX:+UseParallelGC-XX:+UseParallelOldGC-XX:+DisableExplicitGC-Xms768m

我们正在从Java 6和Tomcat 6升级到Java 1.8.0_45和Tomcat 8.0.23,Linux服务器,64位。 我在比较内存使用情况,我面临着一种奇怪的行为

这是Eden Space在Tomcat 8中使用Java 8时的外观,没有流量,刚刚启动且处于空闲状态:

这就是Java 6的外观,对我来说是标准的:

两个JVM的配置方式基本相同:

XX:+UseParallelGC-XX:+UseParallelOldGC-XX:+DisableExplicitGC-Xms768m-Xmx2048m-Xmn400m

对于Java 8和Tomcat 8,次要GC几乎总是在运行,Tomcat日志显示:

1301121:[GC(分配失败)[PSYoungGen:408960K->352K(409088K)]1126151K->717559K(1915392K),00093033秒][次数:用户=0,02系统=0,00,实数=0,01秒]

你知道JVM 8的一些特殊配置吗?或者我必须做些什么才能有与以前相同的行为

编辑:

30分钟后,伊甸园空间为:


在我看来,这首先是应用程序本身的问题。您说过应用程序处于空闲状态,但图表显示(即使在Java6中)应用程序正在分配400MB内存,并每秒释放两次。听起来这个应用程序并不是空闲的

您的应用程序可能会创建许多对象(即使它处于“空闲”状态)。自Java6以来,Java8中的GC和优化器发生了变化。这可以解释不同的图表


但是无论如何,我会首先尝试找出为什么应用程序在您期望它空闲时没有空闲。

在java-8中,您可以使用
G1GC
而不是
ParallelGC
。这可以提高你的表现。至少转到CMS。另外,您可能应该设置gcThreak@TheLostMind要使用的线程数,但问题是,为什么行为与以前不同?您不应该期望跨JVM有类似的行为。太多的事情可能会改变,导致这样的结果output@FranMontero您是如何确定您在Java 8上看到的不是“正常”的?当然,我会尝试@TheLostMind Thankstory,使用Java 6的图形是具有流量的实际生产环境。请看一看相关问题: