gc幸存者空间已满

wfveoks0  于 2021-06-08  发布在  Kafka
关注(0)|答案(2)|浏览(252)

我有一个连接器(Kafka连接)从Kafka流数据到其他一些系统。在处理了60000多条记录之后,它的速度急剧减慢,以至于我最终杀死了我的连接器。
我用jmap命令查看了gc,似乎只有我的幸存者空间已满(100%使用)。
怎么会这样?幸存者空间不只是一个临时的地方吗?我从这篇文章中了解到
我不能理解的是,它在完全使用幸存者空间之前处理了60000条记录。为什么以前不这样?难道他不应该把一部分留给老一代来腾出这个空间吗?
顺便说一句:我在独立模式下运行这个连接器,堆容量为256mb(107代表伊甸园+1代表幸存者+95代表旧版)
下面是一个示例jmap

Heap Configuration:

MinHeapFreeRatio         = 40
MaxHeapFreeRatio         = 70
MaxHeapSize              = 268435456 (256.0MB)
NewSize                  = 1363144 (1.2999954223632812MB)
MaxNewSize               = 160432128 (153.0MB)
OldSize                  = 5452592 (5.1999969482421875MB)
NewRatio                 = 2
SurvivorRatio            = 8
MetaspaceSize            = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize         = 17592186044415 MB
G1HeapRegionSize         = 1048576 (1.0MB) 

Heap Usage:

G1 Heap:
regions  = 256
capacity = 268435456 (256.0MB)
used     = 130770392 (124.71236419677734MB)
free     = 137665064 (131.28763580322266MB)
48.71576726436615% used
G1 Young Generation:
Eden Space:
regions  = 107
capacity = 167772160 (160.0MB)
used     = 112197632 (107.0MB)
free     = 55574528 (53.0MB)
66.875% used
Survivor Space:
regions  = 1
capacity = 1048576 (1.0MB)
used     = 1048576 (1.0MB)
free     = 0 (0.0MB)
100.0% used
G1 Old Generation:
regions  = 18
capacity = 99614720 (95.0MB)
used     = 17524184 (16.712364196777344MB)
free     = 82090536 (78.28763580322266MB)
17.591962312397204% used`
6rqinv9w

6rqinv9w1#

我发现这个问题是由另一个做缓冲的应用程序造成的。无论如何谢谢你!

svdrlsy4

svdrlsy42#

好吧,你说的是“它的速度急剧下降”,但你甚至没有做基本的统计数据收集,例如,它是否被固定在100%的cpu或其他资源瓶颈。
假设它占用cpu时间,下一步是确定它是用在gc中还是用在应用程序代码中。gc日志和运行jstack、jstat或profiler将在这方面有所帮助。缓解将取决于这些发现。
在gc之后幸存者空间被填满是不寻常的,但是由于您正在进行流处理,分配的对象可能足够短暂,以至于对象根本无法存活足够长的时间,无法离开eden空间。如果没有更多的信息,很难判断这是否是一个问题。

相关问题