直接内存溢出

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

直接内存溢出

aven.wu
报错信息如下
Caused by: java.lang.OutOfMemoryError: Direct buffer memory at java.nio.Bits.reserveMemory(Bits.java:693)

 at java.nio.DirectByteBuffer.(DirectByteBuffer.java:123) at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311)

 at sun.nio.ch.Util.getTemporaryDirectBuffer(Util.java:241)

 at sun.nio.ch.IOUtil.read(IOUtil.java:195)

 at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)

 at org.apache.kafka.common.network.PlaintextTransportLayer.read(PlaintextTransportLayer.java:110)

 at org.apache.kafka.common.network.NetworkReceive.readFromReadableChannel(NetworkReceive.java:97)

 at org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:71)

 at org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:169)

 at org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:150)

 at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:355)

 at org.apache.kafka.common.network.Selector.poll(Selector.java:303)

 at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:349)

 at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:226)

 at org.apache.kafka.clients.consumer.KafkaConsumer.pollOnce(KafkaConsumer.java:1047)

 at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:995)



版本
  Flink:1.9.1
  kafka-client:0.10.0.1
环境
  on yarn
JVM参数
  -Xms14336m
  -Xmx14336m
  -XX:MaxDirectMemorySize=6144m
flink-conf.yml
 使用的是默认的参数
 Stream任务,并且没有使用RocksDB
 
目前初步怀疑是Flink 的堆外内存占用过大导致kafka consumer 无法申请堆外内存导致OOM。但根据官方文档的配置
taskmanager.memory.fraction=0.7 这个应该在我的程序中不生效
taskmanager.network.memory.fraction=0.1


这样的配置下来应该用户代码可使用的堆外内存为6144m*0.9=5529m
我的问题是
在我当前的环境下是否还有我没注意到的Flink堆外内存配置,或者Flink需要占用的堆外内存是我所不了解的。
除了控制kafka comsumer 的流量以外有没有什么其他的调整方式?


Best
Aven

Reply | Threaded
Open this post in threaded view
|

Re: 直接内存溢出

Xintong Song
可以使用这两个参数。

   - containerized.heap-cutoff-ratio
   - containerized.heap-cutoff-min

cutoff 的含义是从 container 内存中额外留出一部分,不作为 flink 的 heap/network/managed
内存。这部分内存通常是用于 JVM、用户代码、第三方依赖的对外内存开销。Flink 计算 MaxDirectMemorySize 参数时也会把
cutoff 算进去,因此调大 cutoff 也可以起到放宽直接内存上限的效果。


另外,Flink 1.9 及以前的内存模型是比较混乱的,建议有条件的话尽快升级到新版本。


Thank you~

Xintong Song



On Wed, Dec 16, 2020 at 7:07 PM 巫旭阳 <[hidden email]> wrote:

> 报错信息如下
> Caused by: java.lang.OutOfMemoryError: Direct buffer memory at
> java.nio.Bits.reserveMemory(Bits.java:693)
>
>  at java.nio.DirectByteBuffer.(DirectByteBuffer.java:123) at
> java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311)
>
>  at sun.nio.ch.Util.getTemporaryDirectBuffer(Util.java:241)
>
>  at sun.nio.ch.IOUtil.read(IOUtil.java:195)
>
>  at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
>
>  at
> org.apache.kafka.common.network.PlaintextTransportLayer.read(PlaintextTransportLayer.java:110)
>
>  at
> org.apache.kafka.common.network.NetworkReceive.readFromReadableChannel(NetworkReceive.java:97)
>
>  at
> org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:71)
>
>  at
> org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:169)
>
>  at
> org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:150)
>
>  at
> org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:355)
>
>
>  at org.apache.kafka.common.network.Selector.poll(Selector.java:303)
>
>  at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:349)
>
>  at
> org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:226)
>
>
>  at
> org.apache.kafka.clients.consumer.KafkaConsumer.pollOnce(KafkaConsumer.java:1047)
>
>
>  at
> org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:995)
>
>
>
> 版本
>   Flink:1.9.1
>   kafka-client:0.10.0.1
> 环境
>   on yarn
> JVM参数
>   -Xms14336m
>   -Xmx14336m
>   -XX:MaxDirectMemorySize=6144m
> flink-conf.yml
>  使用的是默认的参数
>  Stream任务,并且没有使用RocksDB
>
> 目前初步怀疑是Flink 的堆外内存占用过大导致kafka consumer 无法申请堆外内存导致OOM。但根据官方文档的配置
> taskmanager.memory.fraction=0.7 这个应该在我的程序中不生效
> taskmanager.network.memory.fraction=0.1
>
>
> 这样的配置下来应该用户代码可使用的堆外内存为6144m*0.9=5529m
> 我的问题是
> 在我当前的环境下是否还有我没注意到的Flink堆外内存配置,或者Flink需要占用的堆外内存是我所不了解的。
> 除了控制kafka comsumer 的流量以外有没有什么其他的调整方式?
>
>
> Best
> Aven
>
>
Reply | Threaded
Open this post in threaded view
|

Re:Re: 直接内存溢出

aven.wu
感谢回复,我尝试一下这两个参数。
我还有一个问题,flink的内存配置参数在启动,在运行时是否有办法查看。
或者在启动的时候是可以通过日志打印出来吗?













--

Best!
Aven





在 2020-12-16 19:22:19,"Xintong Song" <[hidden email]> 写道:

>可以使用这两个参数。
>
>   - containerized.heap-cutoff-ratio
>   - containerized.heap-cutoff-min
>
>cutoff 的含义是从 container 内存中额外留出一部分,不作为 flink 的 heap/network/managed
>内存。这部分内存通常是用于 JVM、用户代码、第三方依赖的对外内存开销。Flink 计算 MaxDirectMemorySize 参数时也会把
>cutoff 算进去,因此调大 cutoff 也可以起到放宽直接内存上限的效果。
>
>
>另外,Flink 1.9 及以前的内存模型是比较混乱的,建议有条件的话尽快升级到新版本。
>
>
>Thank you~
>
>Xintong Song
>
>
>
>On Wed, Dec 16, 2020 at 7:07 PM 巫旭阳 <[hidden email]> wrote:
>
>> 报错信息如下
>> Caused by: java.lang.OutOfMemoryError: Direct buffer memory at
>> java.nio.Bits.reserveMemory(Bits.java:693)
>>
>>  at java.nio.DirectByteBuffer.(DirectByteBuffer.java:123) at
>> java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311)
>>
>>  at sun.nio.ch.Util.getTemporaryDirectBuffer(Util.java:241)
>>
>>  at sun.nio.ch.IOUtil.read(IOUtil.java:195)
>>
>>  at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
>>
>>  at
>> org.apache.kafka.common.network.PlaintextTransportLayer.read(PlaintextTransportLayer.java:110)
>>
>>  at
>> org.apache.kafka.common.network.NetworkReceive.readFromReadableChannel(NetworkReceive.java:97)
>>
>>  at
>> org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:71)
>>
>>  at
>> org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:169)
>>
>>  at
>> org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:150)
>>
>>  at
>> org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:355)
>>
>>
>>  at org.apache.kafka.common.network.Selector.poll(Selector.java:303)
>>
>>  at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:349)
>>
>>  at
>> org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:226)
>>
>>
>>  at
>> org.apache.kafka.clients.consumer.KafkaConsumer.pollOnce(KafkaConsumer.java:1047)
>>
>>
>>  at
>> org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:995)
>>
>>
>>
>> 版本
>>   Flink:1.9.1
>>   kafka-client:0.10.0.1
>> 环境
>>   on yarn
>> JVM参数
>>   -Xms14336m
>>   -Xmx14336m
>>   -XX:MaxDirectMemorySize=6144m
>> flink-conf.yml
>>  使用的是默认的参数
>>  Stream任务,并且没有使用RocksDB
>>
>> 目前初步怀疑是Flink 的堆外内存占用过大导致kafka consumer 无法申请堆外内存导致OOM。但根据官方文档的配置
>> taskmanager.memory.fraction=0.7 这个应该在我的程序中不生效
>> taskmanager.network.memory.fraction=0.1
>>
>>
>> 这样的配置下来应该用户代码可使用的堆外内存为6144m*0.9=5529m
>> 我的问题是
>> 在我当前的环境下是否还有我没注意到的Flink堆外内存配置,或者Flink需要占用的堆外内存是我所不了解的。
>> 除了控制kafka comsumer 的流量以外有没有什么其他的调整方式?
>>
>>
>> Best
>> Aven
>>
>>
Reply | Threaded
Open this post in threaded view
|

Re: Re: 直接内存溢出

Xintong Song
日志文件开头会打环境信息,包括 JVM 参数。

Thank you~

Xintong Song



On Wed, Dec 16, 2020 at 10:01 PM aven <[hidden email]> wrote:

> 感谢回复,我尝试一下这两个参数。
> 我还有一个问题,flink的内存配置参数在启动,在运行时是否有办法查看。
> 或者在启动的时候是可以通过日志打印出来吗?
>
>
>
>
>
>
>
>
>
>
>
>
>
> --
>
> Best!
> Aven
>
>
>
>
>
> 在 2020-12-16 19:22:19,"Xintong Song" <[hidden email]> 写道:
> >可以使用这两个参数。
> >
> >   - containerized.heap-cutoff-ratio
> >   - containerized.heap-cutoff-min
> >
> >cutoff 的含义是从 container 内存中额外留出一部分,不作为 flink 的 heap/network/managed
> >内存。这部分内存通常是用于 JVM、用户代码、第三方依赖的对外内存开销。Flink 计算 MaxDirectMemorySize 参数时也会把
> >cutoff 算进去,因此调大 cutoff 也可以起到放宽直接内存上限的效果。
> >
> >
> >另外,Flink 1.9 及以前的内存模型是比较混乱的,建议有条件的话尽快升级到新版本。
> >
> >
> >Thank you~
> >
> >Xintong Song
> >
> >
> >
> >On Wed, Dec 16, 2020 at 7:07 PM 巫旭阳 <[hidden email]> wrote:
> >
> >> 报错信息如下
> >> Caused by: java.lang.OutOfMemoryError: Direct buffer memory at
> >> java.nio.Bits.reserveMemory(Bits.java:693)
> >>
> >>  at java.nio.DirectByteBuffer.(DirectByteBuffer.java:123) at
> >> java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311)
> >>
> >>  at sun.nio.ch.Util.getTemporaryDirectBuffer(Util.java:241)
> >>
> >>  at sun.nio.ch.IOUtil.read(IOUtil.java:195)
> >>
> >>  at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
> >>
> >>  at
> >>
> org.apache.kafka.common.network.PlaintextTransportLayer.read(PlaintextTransportLayer.java:110)
> >>
> >>  at
> >>
> org.apache.kafka.common.network.NetworkReceive.readFromReadableChannel(NetworkReceive.java:97)
> >>
> >>  at
> >>
> org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:71)
> >>
> >>  at
> >>
> org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:169)
> >>
> >>  at
> >> org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:150)
> >>
> >>  at
> >>
> org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:355)
> >>
> >>
> >>  at org.apache.kafka.common.network.Selector.poll(Selector.java:303)
> >>
> >>  at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:349)
> >>
> >>  at
> >>
> org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:226)
> >>
> >>
> >>  at
> >>
> org.apache.kafka.clients.consumer.KafkaConsumer.pollOnce(KafkaConsumer.java:1047)
> >>
> >>
> >>  at
> >>
> org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:995)
> >>
> >>
> >>
> >> 版本
> >>   Flink:1.9.1
> >>   kafka-client:0.10.0.1
> >> 环境
> >>   on yarn
> >> JVM参数
> >>   -Xms14336m
> >>   -Xmx14336m
> >>   -XX:MaxDirectMemorySize=6144m
> >> flink-conf.yml
> >>  使用的是默认的参数
> >>  Stream任务,并且没有使用RocksDB
> >>
> >> 目前初步怀疑是Flink 的堆外内存占用过大导致kafka consumer 无法申请堆外内存导致OOM。但根据官方文档的配置
> >> taskmanager.memory.fraction=0.7 这个应该在我的程序中不生效
> >> taskmanager.network.memory.fraction=0.1
> >>
> >>
> >> 这样的配置下来应该用户代码可使用的堆外内存为6144m*0.9=5529m
> >> 我的问题是
> >> 在我当前的环境下是否还有我没注意到的Flink堆外内存配置,或者Flink需要占用的堆外内存是我所不了解的。
> >> 除了控制kafka comsumer 的流量以外有没有什么其他的调整方式?
> >>
> >>
> >> Best
> >> Aven
> >>
> >>
>