Geyser
Geyser copied to clipboard
LEAK: ByteBuf.release() was not called before it's garbage-collected
Describe the bug
My players are getting kicked when they join. I can see the player skin in the spigot server on my java account, but the bedrock client just gets a "Disconnected" message
It does not happen immediately. Only after a few hours or so and about 100 players, does this issue occur. This did not happen before 1.20 release. Restarting the Geyser Standalone fixes the problem temporarily
Full error from server:
[19:43:54.162 epollEventLoopGroup-5-6/INFO] Joe123 has disconnected from remote Java server on address ***.***.***.123 because of java.lang.OutOfMemoryError: Cannot reserve 4194304 bytes of direct buffer memory (allocated: 133392804, limit: 134217728) [19:43:55.338 epollEventLoopGroup-3-4/ERROR] Error encoding packet LevelChunkPacket(chunkX=27, chunkZ=19, subChunksLength=17, cachingEnabled=false, requestSubChunks=false, subChunkLimit=0, blobIds=[]) java.lang.OutOfMemoryError: Cannot reserve 4194304 bytes of direct buffer memory (allocated: 133392804, limit: 134217728) at java.nio.Bits.reserveMemory(Bits.java:178) ~[?:?] at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:121) ~[?:?] at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:332) ~[?:?] at io.netty.buffer.PoolArena$DirectArena.allocateDirect(PoolArena.java:701) ~[Geyser.jar:?] at io.netty.buffer.PoolArena$DirectArena.newChunk(PoolArena.java:676) ~[Geyser.jar:?] at io.netty.buffer.PoolArena.allocateNormal(PoolArena.java:215) ~[Geyser.jar:?] at io.netty.buffer.PoolArena.tcacheAllocateNormal(PoolArena.java:197) ~[Geyser.jar:?] at io.netty.buffer.PoolArena.allocate(PoolArena.java:139) ~[Geyser.jar:?] at io.netty.buffer.PoolArena.reallocate(PoolArena.java:302) ~[Geyser.jar:?] at io.netty.buffer.PooledByteBuf.capacity(PooledByteBuf.java:122) ~[Geyser.jar:?] at io.netty.buffer.AbstractByteBuf.ensureWritable0(AbstractByteBuf.java:305) ~[Geyser.jar:?] at io.netty.buffer.AbstractByteBuf.ensureWritable(AbstractByteBuf.java:280) ~[Geyser.jar:?] at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1103) ~[Geyser.jar:?] at org.cloudburstmc.protocol.bedrock.codec.BaseBedrockCodecHelper.writeByteBuf(BaseBedrockCodecHelper.java:96) ~[Geyser.jar:?] at org.cloudburstmc.protocol.bedrock.codec.v486.serializer.LevelChunkSerializer_v486.serialize(LevelChunkSerializer_v486.java:40) ~[Geyser.jar:?] at org.cloudburstmc.protocol.bedrock.codec.v486.serializer.LevelChunkSerializer_v486.serialize(LevelChunkSerializer_v486.java:12) ~[Geyser.jar:?] at org.cloudburstmc.protocol.bedrock.codec.BedrockCodec.tryEncode(BedrockCodec.java:78) ~[Geyser.jar:?] at org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec.encode(BedrockPacketCodec.java:39) ~[Geyser.jar:?] at org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec.encode(BedrockPacketCodec.java:19) ~[Geyser.jar:?] at io.netty.handler.codec.MessageToMessageCodec$1.encode(MessageToMessageCodec.java:67) ~[Geyser.jar:?] at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:90) ~[Geyser.jar:?] at io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116) ~[Geyser.jar:?] at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:879) ~[Geyser.jar:?] at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:863) ~[Geyser.jar:?] at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:968) ~[Geyser.jar:?] at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:856) ~[Geyser.jar:?] at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:851) ~[Geyser.jar:?] at io.netty.channel.DefaultChannelPipeline.write(DefaultChannelPipeline.java:1010) ~[Geyser.jar:?] at io.netty.channel.AbstractChannel.write(AbstractChannel.java:296) ~[Geyser.jar:?] at org.cloudburstmc.protocol.bedrock.BedrockPeer.onTick(BedrockPeer.java:87) ~[Geyser.jar:?] at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98) [Geyser.jar:?] at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:159) [Geyser.jar:?] at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) [Geyser.jar:?] at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) [Geyser.jar:?] at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) [Geyser.jar:?] at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:406) [Geyser.jar:?] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [Geyser.jar:?] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [Geyser.jar:?] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [Geyser.jar:?] at java.lang.Thread.run(Thread.java:831) [?:?]
To Reproduce
- Install latest Geyser Standalone
- Have around 100 players join over an hour or so
- Notice errors in logs
Expected behaviour
No exceptions and allow players to join
Screenshots / Videos
What players see if they try joining when it is having the issues:
Server Version and Plugins
- Geyser version 2.1.1-SNAPSHOT (git-master-53d0026) (Java: 1.20, Bedrock: 1.19.80/1.19.81 - 1.20.0)
- Flamecord is proxy with Floodgate for Bungee installed
- Hub server that they are first connecting to is Paper 1.12.2 with latest Floodgate for spigot and ViaVersion installed. They never make it past the hub server
Geyser Dump
https://dump.geysermc.org/jJI9eq3YGQnpf4D2hqiQ9HBuc8MJED2F
Geyser Version
2.1.1-SNAPSHOT (git-master-53d0026)
Minecraft: Bedrock Edition Device/Version
1.20.0
Additional Context
It does not happen immediately. Only after a few hours or so and about 100 players, does this issue occur. This did not happen before 1.20 release. Restarting the Geyser Standalone fixes the problem temporarily