java gc 100% from 和 0% to space

java gc 100% of from and 0% of to space

遇到一个奇怪的问题,From space 是 100% 而 to space 总是 0。 谁能帮我离开这里?

jdk 1.8.25 os: linux

使用 JMAP 获取以下内容

Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 32212254720 (30720.0MB)
   NewSize                  = 268435456 (256.0MB)
   MaxNewSize               = 268435456 (256.0MB)
   OldSize                  = 31943819264 (30464.0MB)
   NewRatio                 = 5
   SurvivorRatio            = 4
   MetaspaceSize            = 268435456 (256.0MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 268435456 (256.0MB)
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
    New Generation (Eden + 1 Survivor Space):
   capacity = 223739904 (213.375MB)
   used     = 113230096 (107.98463439941406MB)
   free     = 110509808 (105.39036560058594MB)
   50.607913016714264% used
Eden Space:
   capacity = 179044352 (170.75MB)
   used     = 68534544 (65.35963439941406MB)
   free     = 110509808 (105.39036560058594MB)
   38.27797036568906% used
From Space:
   capacity = 44695552 (42.625MB)
   used     = 44695552 (42.625MB)
   free     = 0 (0.0MB)
   100.0% used
To Space:
   capacity = 44695552 (42.625MB)
   used     = 0 (0.0MB)
   free     = 44695552 (42.625MB)
   0.0% used
concurrent mark-sweep generation:
   capacity = 31943819264 (30464.0MB)
   used     = 390280592 (372.20057678222656MB)
   free     = 31553538672 (30091.799423217773MB)
   1.2217718513072038% used

在gc.log中,它总是说'allocation failure',我怎样才能改变'survivor size'?

[GC (Allocation Failure) 10.371: [ParNew Desired survivor size 22347776 bytes, new threshold 15

"Allocation failure" 是次要 GC 的正常原因(较旧的 JVM 不是打印原因,但一直是分配失败)。

"To space" 应该始终为空(它不是空的,在 Stop-the-World GC 阶段,但随后 GC 完成它始终为 0%)。

100% "From space" 也可以。通常 JVM 会调整 tenuring threshold 以使 "From space" 尽可能接近 100%。不过,恰好达到 100% 意味着某些对象过早升级。

生存规模 space 由 -XX:SurvivorRatio=N 选项控制。使用 -XX:+PrintTenuringDistribution 对调整年轻 GC 很有用。

Here 可以找到更多与 GC 调优相关的 JVM 选项。