我有两个运行相同Web应用程序的tomcat服务器,这些服务器在JVM内存容量方面表现出截然不同的行为。两台服务器之间的主要区别在于服务器1具有15GB内存,而服务器2具有3.75gb(这种差异显然是由于已解决的问题而遗留的,但服务器大小未缩减)。
在服务器1上,我们有:
java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=245500672 -XX:MaxHeapSize=3928010752 -XX:+PrintCommandLineFlags -XX:+UseCompressedOops -XX:+UseParallelGC
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)
在服务器2上:
java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=61513536 -XX:MaxHeapSize=984216576 -XX:+PrintCommandLineFlags -XX:+UseCompressedOops
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)
服务器2展示了我过去常常看到的容量与利用率的关系。容量(在这种情况下为幸存者)保持稳定,而利用率动态变化:
然而,服务器1显示大&频繁更改容量:
伊甸园空间显示出类似的模式。旧的空间在服务器1上按预期合理地驯服,但仍然比服务器2更频繁地发生变化。
图表来自发布" jstat -gc"值。显示的幸存者空间是S0C + S1C。这是UseParallelGC的一个因素吗?我不这么认为,但我看不到服务器之间的其他差异。服务器1确实获得了更高的交易量,但我怀疑它解释了这一点。