我正在hadoop集群上运行spark。在(巨大的)随机播放阶段中,一些执行器由于内存不足而崩溃。
在调查过程中,我发现OOM是在netty线程中触发的,这是由于ChannelOutboundBuffer
试图增长到非常大的价值(我认为是2GB并试图使其翻倍)。
我看了一些Spark和Netty的源代码,并有以下问题:
ChannelOutboundBuffer
变大? (即超过2GB)ChannelOutboundBuffer
拥有数据的完整副本,因为它可以流式传输。在那种情况下,为什么要在发送之前在ChannelOutboundBuffer
中缓存这么多数据?