Skip to content

Instantly share code, notes, and snippets.

@pcarrier
Last active August 29, 2015 14:01
Show Gist options
  • Save pcarrier/ccd873fee1105d7c7714 to your computer and use it in GitHub Desktop.
Save pcarrier/ccd873fee1105d7c7714 to your computer and use it in GitHub Desktop.
From git@github.com:airbnb/plog branch master
- Create a config file with:
$ echo 'plog.server.udp.listeners=[{handlers=[{provider="com.airbnb.plog.stress.EaterProvider"}]}]' > plog-server/src/main/resources/application.conf
- Fire up the server with './gradlew run'
- Package with './gradlew shadowJar'
- Run the stresser with:
$ java -server -cp .:plog-distro/build/distributions/plog-distro-*.jar -Dplog.stress.udp.loss=0.1 -Dplog.stress.rate=100 -Dplog.stress.min_size=100000 -Dplog.stress.max_size=200000 plog.Stress
After a while it'll start logging a lot of:
5:47:40.274 [nioEventLoopGroup-2-1] ERROR com.airbnb.plog.server.pipeline.EndOfPipeline - Exception down the pipeline
java.lang.OutOfMemoryError: Direct buffer memory
at java.nio.Bits.reserveMemory(Bits.java:658) ~[na:1.8.0_05]
at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:123) ~[na:1.8.0_05]
at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311) ~[na:1.8.0_05]
at io.netty.buffer.PoolArena$DirectArena.newChunk(PoolArena.java:434) ~[netty-buffer-4.0.19.Final.jar:4.0.19.Final]
at io.netty.buffer.PoolArena.allocateNormal(PoolArena.java:179) ~[netty-buffer-4.0.19.Final.jar:4.0.19.Final]
at io.netty.buffer.PoolArena.allocate(PoolArena.java:168) ~[netty-buffer-4.0.19.Final.jar:4.0.19.Final]
at io.netty.buffer.PoolArena.allocate(PoolArena.java:98) ~[netty-buffer-4.0.19.Final.jar:4.0.19.Final]
at io.netty.buffer.PooledByteBufAllocator.newDirectBuffer(PooledByteBufAllocator.java:261) ~[netty-buffer-4.0.19.Final.jar:4.0.19.Final]
at io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:155) ~[netty-buffer-4.0.19.Final.jar:4.0.19.Final]
at io.netty.buffer.AbstractByteBufAllocator.buffer(AbstractByteBufAllocator.java:91) ~[netty-buffer-4.0.19.Final.jar:4.0.19.Final]
at com.airbnb.plog.server.fragmentation.FragmentedMessage.<init>(FragmentedMessage.java:36) ~[plog-server-v4.0.0-ALPHA-44-g8b81245.jar:na]
at com.airbnb.plog.server.fragmentation.FragmentedMessage.fromFragment(FragmentedMessage.java:49) ~[plog-server-v4.0.0-ALPHA-44-g8b81245.jar:na]
at com.airbnb.plog.server.fragmentation.Defragmenter.ingestIntoIncompleteMessage(Defragmenter.java:84) ~[plog-server-v4.0.0-ALPHA-44-g8b81245.jar:na]
at com.airbnb.plog.server.fragmentation.Defragmenter.decode(Defragmenter.java:102) ~[plog-server-v4.0.0-ALPHA-44-g8b81245.jar:na]
at com.airbnb.plog.server.fragmentation.Defragmenter.decode(Defragmenter.java:19) ~[plog-server-v4.0.0-ALPHA-44-g8b81245.jar:na]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) [netty-codec-4.0.19.Final.jar:4.0.19.Final]
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:341) [netty-transport-4.0.19.Final.jar:4.0.19.Final]
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:327) [netty-transport-4.0.19.Final.jar:4.0.19.Final]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) [netty-codec-4.0.19.Final.jar:4.0.19.Final]
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:341) [netty-transport-4.0.19.Final.jar:4.0.19.Final]
at io.netty.channel.DefaultChannelHandlerContext.access$700(DefaultChannelHandlerContext.java:30) [netty-transport-4.0.19.Final.jar:4.0.19.Final]
at io.netty.channel.DefaultChannelHandlerContext$8.run(DefaultChannelHandlerContext.java:332) [netty-transport-4.0.19.Final.jar:4.0.19.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:370) [netty-common-4.0.19.Final.jar:4.0.19.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353) [netty-transport-4.0.19.Final.jar:4.0.19.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) [netty-common-4.0.19.Final.jar:4.0.19.Final]
at java.lang.Thread.null(Unknown Source) [na:1.8.0_05]
Sticking to smaller messages makes the problem disappear.
NEVERMIND, got it:
15:26:15.119 [nioEventLoopGroup-2-1] ERROR io.netty.util.ResourceLeakDetector - LEAK: ByteBuf.release() was not called before it's garbage-collected.
Recent access records: 3
#3:
io.netty.buffer.AdvancedLeakAwareByteBuf.release(AdvancedLeakAwareByteBuf.java:45)
io.netty.buffer.DefaultByteBufHolder.release(DefaultByteBufHolder.java:73)
com.airbnb.plog.server.fragmentation.Defragmenter$1.onRemoval(Defragmenter.java:54)
com.google.common.cache.LocalCache.processPendingNotifications(LocalCache.java:1954)
com.google.common.cache.LocalCache$Segment.runUnlockedCleanup(LocalCache.java:3457)
com.google.common.cache.LocalCache$Segment.postWriteCleanup(LocalCache.java:3433)
com.google.common.cache.LocalCache$Segment.put(LocalCache.java:2888)
com.google.common.cache.LocalCache.put(LocalCache.java:4146)
com.google.common.cache.LocalCache$LocalManualCache.put(LocalCache.java:4751)
com.airbnb.plog.server.fragmentation.Defragmenter.ingestIntoIncompleteMessage(Defragmenter.java:87)
com.airbnb.plog.server.fragmentation.Defragmenter.decode(Defragmenter.java:102)
com.airbnb.plog.server.fragmentation.Defragmenter.decode(Defragmenter.java:19)
io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89)
io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:341)
io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:327)
io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:341)
io.netty.channel.DefaultChannelHandlerContext.access$700(DefaultChannelHandlerContext.java:30)
io.netty.channel.DefaultChannelHandlerContext$8.run(DefaultChannelHandlerContext.java:332)
io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:370)
io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353)
io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
java.lang.Thread.run(Thread.java:745)
#2:
io.netty.buffer.AdvancedLeakAwareByteBuf.retain(AdvancedLeakAwareByteBuf.java:709)
io.netty.buffer.DefaultByteBufHolder.retain(DefaultByteBufHolder.java:61)
com.airbnb.plog.server.fragmentation.Defragmenter.ingestIntoIncompleteMessage(Defragmenter.java:86)
com.airbnb.plog.server.fragmentation.Defragmenter.decode(Defragmenter.java:102)
com.airbnb.plog.server.fragmentation.Defragmenter.decode(Defragmenter.java:19)
io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89)
io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:341)
io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:327)
io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:341)
io.netty.channel.DefaultChannelHandlerContext.access$700(DefaultChannelHandlerContext.java:30)
io.netty.channel.DefaultChannelHandlerContext$8.run(DefaultChannelHandlerContext.java:332)
io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:370)
io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353)
io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
java.lang.Thread.run(Thread.java:745)
#1:
io.netty.buffer.AdvancedLeakAwareByteBuf.setBytes(AdvancedLeakAwareByteBuf.java:313)
com.airbnb.plog.server.fragmentation.FragmentedMessage.ingestFragment(FragmentedMessage.java:92)
com.airbnb.plog.server.fragmentation.FragmentedMessage.fromFragment(FragmentedMessage.java:50)
com.airbnb.plog.server.fragmentation.Defragmenter.ingestIntoIncompleteMessage(Defragmenter.java:84)
com.airbnb.plog.server.fragmentation.Defragmenter.decode(Defragmenter.java:102)
com.airbnb.plog.server.fragmentation.Defragmenter.decode(Defragmenter.java:19)
io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89)
io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:341)
io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:327)
io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:341)
io.netty.channel.DefaultChannelHandlerContext.access$700(DefaultChannelHandlerContext.java:30)
io.netty.channel.DefaultChannelHandlerContext$8.run(DefaultChannelHandlerContext.java:332)
io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:370)
io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353)
io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
java.lang.Thread.run(Thread.java:745)
Created at:
io.netty.buffer.PooledByteBufAllocator.newDirectBuffer(PooledByteBufAllocator.java:270)
io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:155)
io.netty.buffer.AbstractByteBufAllocator.buffer(AbstractByteBufAllocator.java:91)
com.airbnb.plog.server.fragmentation.FragmentedMessage.<init>(FragmentedMessage.java:36)
com.airbnb.plog.server.fragmentation.FragmentedMessage.fromFragment(FragmentedMessage.java:49)
com.airbnb.plog.server.fragmentation.Defragmenter.ingestIntoIncompleteMessage(Defragmenter.java:84)
com.airbnb.plog.server.fragmentation.Defragmenter.decode(Defragmenter.java:102)
com.airbnb.plog.server.fragmentation.Defragmenter.decode(Defragmenter.java:19)
io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89)
io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:341)
io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:327)
io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:341)
io.netty.channel.DefaultChannelHandlerContext.access$700(DefaultChannelHandlerContext.java:30)
io.netty.channel.DefaultChannelHandlerContext$8.run(DefaultChannelHandlerContext.java:332)
io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:370)
io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353)
io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
java.lang.Thread.run(Thread.java:745)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment