[ 
https://issues.apache.org/jira/browse/IGNITE-28310?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Pavel Tupitsyn reassigned IGNITE-28310:
---------------------------------------

    Assignee: Pavel Tupitsyn

> ClientInboundMessageHandler#writeError may cause significant GC pressure in 
> case of multiple exceptions
> -------------------------------------------------------------------------------------------------------
>
>                 Key: IGNITE-28310
>                 URL: https://issues.apache.org/jira/browse/IGNITE-28310
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Denis Chudov
>            Assignee: Pavel Tupitsyn
>            Priority: Major
>              Labels: ignite-3
>
> In case of multiple exceptions, writeError causes massive memory allocations, 
> creating GC pressure and provoking further degradation.
> Some samples:
> {noformat}
> void java.lang.Thread.run()
> void java.lang.Thread.runWith(Object, Runnable)
> void java.util.concurrent.ThreadPoolExecutor$Worker.run()
> void 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker)
> void java.util.concurrent.CompletableFuture$Completion.run()
> CompletableFuture 
> java.util.concurrent.CompletableFuture$UniHandle.tryFire(int)
> CompletableFuture 
> java.util.concurrent.CompletableFuture.postFire(CompletableFuture, int)
> void java.util.concurrent.CompletableFuture.postComplete()
> CompletableFuture 
> java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(int)
> boolean java.util.concurrent.CompletableFuture.uniWhenComplete(Object, 
> BiConsumer, CompletableFuture$UniWhenComplete)
> void 
> org.apache.ignite.internal.tx.impl.TransactionInflights$ReadWriteTxContext$$Lambda.0x00000008011dbcc0.accept(Object,
>  Object)
> void 
> org.apache.ignite.internal.tx.impl.TransactionInflights$ReadWriteTxContext.lambda$performFinish$1(Throwable,
>  Void, Throwable)
> void 
> org.apache.ignite.internal.tx.impl.TransactionInflights$ReadWriteTxContext.completeFinishInProgressFuture(boolean,
>  Throwable, Throwable)
> boolean java.util.concurrent.CompletableFuture.complete(Object)
> void java.util.concurrent.CompletableFuture.postComplete()
> CompletableFuture 
> java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(int)
> boolean java.util.concurrent.CompletableFuture.uniWhenComplete(Object, 
> BiConsumer, CompletableFuture$UniWhenComplete)
> void 
> org.apache.ignite.client.handler.ClientInboundMessageHandler$$Lambda.0x0000000801086e20.accept(Object,
>  Object)
> void 
> org.apache.ignite.client.handler.ClientInboundMessageHandler.lambda$processOperationInternal$12(long,
>  int, ChannelHandlerContext, HybridTimestampTracker, ResponseWriter, Object)
> void 
> org.apache.ignite.client.handler.ClientInboundMessageHandler.writeError(long, 
> int, Throwable, ChannelHandlerContext, boolean)
> void 
> org.apache.ignite.client.handler.ClientInboundMessageHandler.writeErrorCore(Throwable,
>  ClientMessagePacker)
> String 
> org.apache.ignite.internal.util.ExceptionUtils.getFullStackTrace(Throwable)
> List 
> org.apache.ignite.internal.util.ExceptionUtils.getThrowableList(Throwable)
> Throwable org.apache.ignite.internal.util.ExceptionUtils.getCause(Throwable)
> Throwable org.apache.ignite.internal.util.ExceptionUtils.getCause(Throwable, 
> String[])
> Throwable 
> org.apache.ignite.internal.util.ExceptionUtils.getCauseUsingMethodName(Throwable,
>  String)
> Method java.lang.Class.getMethod(String, Class[])
> void java.lang.NoSuchMethodException.<init>(String)
> void java.lang.ReflectiveOperationException.<init>(String)
> void java.lang.Exception.<init>(String)
> void java.lang.Throwable.<init>(String)
> Throwable java.lang.Throwable.fillInStackTrace()
> Throwable java.lang.Throwable.fillInStackTrace(int)
> {noformat}
> 606 MiB.
>  
> Also,
> {noformat}
> void java.lang.Thread.run()
> void java.lang.Thread.runWith(Object, Runnable)
> void java.util.concurrent.ThreadPoolExecutor$Worker.run()
> void 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker)
> void java.util.concurrent.CompletableFuture$Completion.run()
> CompletableFuture 
> java.util.concurrent.CompletableFuture$UniHandle.tryFire(int)
> CompletableFuture 
> java.util.concurrent.CompletableFuture.postFire(CompletableFuture, int)
> void java.util.concurrent.CompletableFuture.postComplete()
> CompletableFuture 
> java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(int)
> boolean java.util.concurrent.CompletableFuture.uniWhenComplete(Object, 
> BiConsumer, CompletableFuture$UniWhenComplete)
> void 
> org.apache.ignite.internal.tx.impl.TransactionInflights$ReadWriteTxContext$$Lambda.0x00000008011dbcc0.accept(Object,
>  Object)
> void 
> org.apache.ignite.internal.tx.impl.TransactionInflights$ReadWriteTxContext.lambda$performFinish$1(Throwable,
>  Void, Throwable)
> void 
> org.apache.ignite.internal.tx.impl.TransactionInflights$ReadWriteTxContext.completeFinishInProgressFuture(boolean,
>  Throwable, Throwable)
> boolean java.util.concurrent.CompletableFuture.complete(Object)
> void java.util.concurrent.CompletableFuture.postComplete()
> CompletableFuture 
> java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(int)
> boolean java.util.concurrent.CompletableFuture.uniWhenComplete(Object, 
> BiConsumer, CompletableFuture$UniWhenComplete)
> void 
> org.apache.ignite.client.handler.ClientInboundMessageHandler$$Lambda.0x0000000801086e20.accept(Object,
>  Object)
> void 
> org.apache.ignite.client.handler.ClientInboundMessageHandler.lambda$processOperationInternal$12(long,
>  int, ChannelHandlerContext, HybridTimestampTracker, ResponseWriter, Object)
> void 
> org.apache.ignite.client.handler.ClientInboundMessageHandler.writeError(long, 
> int, Throwable, ChannelHandlerContext, boolean)
> void 
> org.apache.ignite.client.handler.ClientInboundMessageHandler.writeErrorCore(Throwable,
>  ClientMessagePacker)
> String 
> org.apache.ignite.internal.util.ExceptionUtils.getFullStackTrace(Throwable)
> List 
> org.apache.ignite.internal.util.ExceptionUtils.getThrowableList(Throwable)
> Throwable org.apache.ignite.internal.util.ExceptionUtils.getCause(Throwable)
> Throwable org.apache.ignite.internal.util.ExceptionUtils.getCause(Throwable, 
> String[])
> Throwable 
> org.apache.ignite.internal.util.ExceptionUtils.getCauseUsingMethodName(Throwable,
>  String)
> Method java.lang.Class.getMethod(String, Class[])
> String java.lang.Class.methodToString(String, Class[])
> Object java.util.stream.ReferencePipeline.collect(Collector)
> Object java.util.stream.AbstractPipeline.evaluate(TerminalOp)
> Object java.util.stream.ReduceOps$ReduceOp.evaluateSequential(PipelineHelper, 
> Spliterator)
> Sink java.util.stream.AbstractPipeline.wrapAndCopyInto(Sink, Spliterator)
> void java.util.stream.AbstractPipeline.copyInto(Sink, Spliterator)
> void java.util.Spliterators$ArraySpliterator.forEachRemaining(Consumer)
> void java.util.stream.ReferencePipeline$3$1.accept(Object)
> void java.util.stream.ReduceOps$3ReducingSink.accept(Object)
> void java.util.stream.Collectors$$Lambda.0x00000008001222e8.accept(Object, 
> Object)
> StringJoiner java.util.StringJoiner.add(CharSequence)
> {noformat}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to