这是一个长时间运行的服务器应用程序,它会产生大量短暂的垃圾,并且在启动后几乎没有任何东西。大多数时候年轻一代收集速度很快,即使是10GB也很快,因为它几乎都是垃圾,但我们偶尔会看到残酷的异常值。作为一个潜在的暗示,我们在一台CPU资源更多但内存少12GB的机器上以较低的负载运行类似配置的服务器。我们在那里没有看到这种模式。java-Xms20g-Xmx20g-Xloggc:"./logs/gc.log"-XX:+PrintGCDetails-XX:+PrintGCDateStamps-XX:NewRatio=1-XX:+DisableExplicitGC-XX:+UseSpinning
我将我的java应用程序配置为使用5G内存。我突然遇到了OutOfMemory。我检查了gc日志,发现剩余内存充足:年轻代占用4%分配空间,tenure代占用5%,perm代占用43%。我很困惑为什么JVM在gc时间抛出OutOfMemory。有谁知道为什么会这样?非常感谢您的帮助。JVM内存和gc设置:-server-Xms5g-Xmx5g-Xss256k-XX:NewSize=2g-XX:MaxNewSize=2g-XX:+UseParallelOldGC-XX:+UseTLAB-XX:SurvivorRatio=8-XX:TargetSurvivorRatio=90-XX:+Di
有时,在测试机器(Windows)上,Java完整GC需要超过20秒。GC日志显示real时间非常高,user也很高,但没有那么高(大约3秒)。在一种情况下,它是:21.2209796secs[Times:user=3.76sys=0.45,real=21.22secs]可能是什么原因?我有一个怀疑,但现在不想说。找出根本原因的最简单方法是什么?如果您不了解Windows但了解Linux,那也是一种选择:可以在Linux上重新运行测试。流程是这样开始的:"%JAVA_HOME%\bin\java.exe"-verbose:gc-XX:+PrintGCDetails-XX:+PrintG
我有java应用程序,它可以使用特定的内存来完成一些工作。我注意到,当我开始应用程序时,将近80%的堆设置用于年轻一代,我的应用程序运行速度比默认1:2设置快得多。特别是,我启动jvm时:java-XX:NewSize=10G-XX:+UseParallelOldGC-server-Xmx12G-Xms12G服务器至少有14Gb的可用物理内存,因此我认为对于Java堆和“其他”空间来说应该足够了。现在事情是这样的:25.289:[GC[PSYoungGen:7872317K->1058813K(9175040K)]7872533K->1059029K(11272192K),0.1876
为了调整Java6(1.6.0_23)GC,我使用-XX:+UseParallelOldGC和-XX:+PrintTenuringDistribution-XX:+UseAdaptiveSizePolicy-XX:+UseAdaptiveGCBoundary我的目标是让GC计算新旧区域之间的最佳比例。然而,visualgc(jvmstat3.0)表明,虽然伊甸园和幸存者之间的比例根据我的工作量进行了修改,旧区域(绝望地)保持其初始大小,由newRatio(在我的例子中为2)固定。我的设置或期望有什么问题?在我的屏幕上,经过19次收集后,visualgc显示旧Gen始终低于500m而旧G
我们观察到完整垃圾回收(GC)通常每小时执行一次。检查了JreMemoryLeakPreventionListener的时间间隔。它被设置为Long.MAX_VALUE。尽管gc每小时运行一次。还观察到GC称为hourlybasis是显式GCGC日志:2016-10-15T23:23:09.341-0400:165558.099:[GC(System.gc())[PSYoungGen:264601K->5865K(1357312K)]389672K->130937K(4153856K),0.0075210secs][Times:user=0.07sys=0.00,real=0.00se