[
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)