在我尝试了许多不同的JVM GC设置并进行了大量测试后,我现在正在测试G1GC JVM GC。除此之外,我还使用性能监视器收集数据,并且唯一运行的应用程序(除系统服务之外)是GlassFish服务器和我的应用程序。我在性能监视器日志中没有发现任何奇怪的情况(CPU使用率约为5-10%,当GC发生时会略微增加,内存使用率约为60% ...)。现在是第五天的测试,我注意到以下情况:
在第二个主要(混合)GC之前,一切都很好(小GC大约需要20ms,GC性能为160000M/s,...)。第二个主要GC花费了大约2秒钟(长时间-第一个GC需要150ms,但不是关键因素),之后小GC比以前更长(请参见灰色线条,表示幼年GC的持续时间),而GC性能仅为12000M/s,并且仍在下降。我想知道为什么在第二次主要GC之后会出现这种情况,即使没有其他应用程序在运行,CPU /内存使用率与之前相同。我不知道这里发生了什么。我还有一个问题-我在另一台具有较少RAM和旧处理器的PC上运行了同样的测试,并且在那里GC性能约为5000M/s(小GC约为50-100ms),我认为这是正常的,因为处理器更差,RAM更少。奇怪的是,在第二台PC上尚未发生主要GC,而老年代的增长速度比此处慢得多,即使设置相同。为什么老年代的增长速度慢得多(这里是两天内约150MB,在第二台PC上为3天内80 MB)?谢谢您的回答,我不知道为什么GC表现如此异常(首先它表现良好,然后表现恶化)。
编辑:这里是完整的GC日志文件,已导入GCViewer以及来自GCViewer的事件详细信息统计:
第三个主要GC的日志:
2015-06-08T08:09:13.123+0200: 572815.533: [GC concurrent-root-region-scan-start]
2015-06-08T08:09:13.139+0200: 572815.560: [GC concurrent-root-region-scan-end, 0.0271771 secs]
2015-06-08T08:09:13.139+0200: 572815.560: [GC concurrent-mark-start]
2015-06-08T08:09:16.302+0200: 572818.721: [GC concurrent-mark-end, 3.1612900 secs]
2015-06-08T08:09:16.318+0200: 572818.729: [GC remark 572818.729: [Finalize Marking, 0.0002590 secs] 572818.729: [GC ref-proc, 0.4479462 secs] 572819.177: [Unloading, 3.2004912 secs], 3.6499382 secs]
[Times: user=0.20 sys=0.08, real=3.64 secs]
再次提醒,实时响应时间远高于用户+系统时间,卸载阶段需要超过3秒的时间。
-XX:+PrintGCDetails
进行记录。 - the8472