You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@uniffle.apache.org by "zhengchenyu (via GitHub)" <gi...@apache.org> on 2023/08/17 02:57:02 UTC

[GitHub] [incubator-uniffle] zhengchenyu commented on issue #1152: [Bug] Direct memory may leak in shuffle server.

zhengchenyu commented on issue #1152:
URL: https://github.com/apache/incubator-uniffle/issues/1152#issuecomment-1681535561

   We add these startup options to analyse:
   ```
   -Dio.netty.leakDetection.level=PARANOID -XX:NativeMemoryTracking=detail
   ```
   
   Then we found these logs
   
   ```
   [ERROR] 2023-08-16 12:56:11,453 Grpc-146 ResourceLeakDetector reportTracedLeak - LEAK: ByteBuf.release() was not called before it's garbage-collected. See https://netty.io/wiki/reference-counted-objects.html for more information.
   Recent access records: 
   #1:
           io.netty.buffer.AdvancedLeakAwareByteBuf.order(AdvancedLeakAwareByteBuf.java:71)
           io.netty.buffer.CompositeByteBuf.newComponent(CompositeByteBuf.java:346)
           io.netty.buffer.CompositeByteBuf.consolidate0(CompositeByteBuf.java:1758)
           io.netty.buffer.CompositeByteBuf.consolidateIfNeeded(CompositeByteBuf.java:571)
           io.netty.buffer.CompositeByteBuf.addComponent(CompositeByteBuf.java:266)
           io.netty.buffer.CompositeByteBuf.addComponent(CompositeByteBuf.java:222)
           org.apache.uniffle.server.buffer.ShuffleBuffer.updateShuffleData(ShuffleBuffer.java:272)
           org.apache.uniffle.server.buffer.ShuffleBuffer.getShuffleData(ShuffleBuffer.java:169)
           org.apache.uniffle.server.buffer.ShuffleBufferManager.getShuffleData(ShuffleBufferManager.java:231)
           org.apache.uniffle.server.ShuffleTaskManager.getInMemoryShuffleData(ShuffleTaskManager.java:516)
           org.apache.uniffle.server.ShuffleServerGrpcService.getMemoryShuffleData(ShuffleServerGrpcService.java:798)
           org.apache.uniffle.proto.ShuffleServerGrpc$MethodHandlers.invoke(ShuffleServerGrpc.java:1053)
           io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.java:182)
           io.grpc.PartialForwardingServerCallListener.onHalfClose(PartialForwardingServerCallListener.java:35)
           io.grpc.ForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:23)
           io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:352)
           io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed.runInContext(ServerImpl.java:866)
           io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
           io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
           java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
           java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
           java.base/java.lang.Thread.run(Thread.java:829)
   #2:
           io.netty.buffer.AdvancedLeakAwareByteBuf.writeBytes(AdvancedLeakAwareByteBuf.java:605)
           io.netty.buffer.CompositeByteBuf$Component.transferTo(CompositeByteBuf.java:1927)
           io.netty.buffer.CompositeByteBuf.consolidate0(CompositeByteBuf.java:1754)
           io.netty.buffer.CompositeByteBuf.consolidateIfNeeded(CompositeByteBuf.java:571)
           io.netty.buffer.CompositeByteBuf.addComponent(CompositeByteBuf.java:266)
           io.netty.buffer.CompositeByteBuf.addComponent(CompositeByteBuf.java:222)
           org.apache.uniffle.server.buffer.ShuffleBuffer.updateShuffleData(ShuffleBuffer.java:272)
           org.apache.uniffle.server.buffer.ShuffleBuffer.getShuffleData(ShuffleBuffer.java:169)
           org.apache.uniffle.server.buffer.ShuffleBufferManager.getShuffleData(ShuffleBufferManager.java:231)
           org.apache.uniffle.server.ShuffleTaskManager.getInMemoryShuffleData(ShuffleTaskManager.java:516)
           org.apache.uniffle.server.ShuffleServerGrpcService.getMemoryShuffleData(ShuffleServerGrpcService.java:798)
           org.apache.uniffle.proto.ShuffleServerGrpc$MethodHandlers.invoke(ShuffleServerGrpc.java:1053)
           io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.java:182)
           io.grpc.PartialForwardingServerCallListener.onHalfClose(PartialForwardingServerCallListener.java:35)
           io.grpc.ForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:23)
           io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:352)
           io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed.runInContext(ServerImpl.java:866)
           io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
           io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
           java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
           java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
           java.base/java.lang.Thread.run(Thread.java:829)
   Created at:
           io.netty.buffer.PooledByteBufAllocator.newDirectBuffer(PooledByteBufAllocator.java:402)
           io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:188)
           io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:179)
           io.netty.buffer.CompositeByteBuf.allocBuffer(CompositeByteBuf.java:1872)
           io.netty.buffer.CompositeByteBuf.consolidate0(CompositeByteBuf.java:1751)
           io.netty.buffer.CompositeByteBuf.consolidateIfNeeded(CompositeByteBuf.java:571)
           io.netty.buffer.CompositeByteBuf.addComponent(CompositeByteBuf.java:266)
           io.netty.buffer.CompositeByteBuf.addComponent(CompositeByteBuf.java:222)
           org.apache.uniffle.server.buffer.ShuffleBuffer.updateShuffleData(ShuffleBuffer.java:272)
           org.apache.uniffle.server.buffer.ShuffleBuffer.getShuffleData(ShuffleBuffer.java:169)
           org.apache.uniffle.server.buffer.ShuffleBufferManager.getShuffleData(ShuffleBufferManager.java:231)
           org.apache.uniffle.server.ShuffleTaskManager.getInMemoryShuffleData(ShuffleTaskManager.java:516)
           org.apache.uniffle.server.ShuffleServerGrpcService.getMemoryShuffleData(ShuffleServerGrpcService.java:798)
           org.apache.uniffle.proto.ShuffleServerGrpc$MethodHandlers.invoke(ShuffleServerGrpc.java:1053)
           io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.java:182)
           io.grpc.PartialForwardingServerCallListener.onHalfClose(PartialForwardingServerCallListener.java:35)
           io.grpc.ForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:23)
           io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:352)
           io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed.runInContext(ServerImpl.java:866)
           io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
           io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
           java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
           java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
           java.base/java.lang.Thread.run(Thread.java:829)
   ```
   
   We found NettyManagedBuffer in https://github.com/apache/incubator-uniffle/blob/5ac76e8179a7c038855d439bfbdc9bf759f3f108/server/src/main/java/org/apache/uniffle/server/buffer/ShuffleBuffer.java#L170 is never released in GRPC mode. 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscribe@uniffle.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@uniffle.apache.org
For additional commands, e-mail: issues-help@uniffle.apache.org