java-version
在两个版本上都相同)使用相同的命令行GC选项运行:-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseParallelGC -XX:+UseCompressedOops
另外:
-Xmx1024M -Xms1024M -XX:NewSize=512M -XX:SurvivorRatio=2
这两台机器的区别在于新机器的RAM大约是旧机器的两倍(32gb
-尽管最大堆大小未变),同时拥有更多的核心(24 vs. 16)。
该应用程序连接到多个外部进程并执行大量网络操作,因此这可能表明存在一些退步、配置错误或不兼容性(这就是我们进行测试的原因...)。我想知道的是:
在更多的核心上运行时,年轻代GC的增加是否可能是自然和预期的后果,或者我应该对这种情况感到担忧?
我们在JConsole中确认了GC的数量,但与执行以下操作相同:
grep "PSYoungGen" ./log | wc -l
(注意 -XX:+PrintGC -XX:+PrintGCDetails
)
两个服务器上的Full GC看起来差不多。
请注意,这里的GC次数是整个应用程序启动过程中的次数,因此它并没有执行"更多的工作"。是相同的工作,只是进行了更多的垃圾回收运行。
我曾经想知道,例如是否使用-XX:+UseParallelGC
会导致日志中出现大量的条目,因为使用了更多的线程(将young-gen collections分解成更小的部分,意味着有更多、更小的collections-这不是需要担心的事情)。