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

Iurii Gerzhedovich updated IGNITE-28311:
----------------------------------------
    Component/s: sql ai3

> Massive Integer boxing in index lockers
> ---------------------------------------
>
>                 Key: IGNITE-28311
>                 URL: https://issues.apache.org/jira/browse/IGNITE-28311
>             Project: Ignite
>          Issue Type: Bug
>          Components: sql ai3
>            Reporter: Denis Chudov
>            Priority: Major
>              Labels: ignite-3
>
> See [1]
> It creates Map<Integer, IndexLocker> using index id as a key. There is 
> limited amount of index ids in the system, but every time plain int value is 
> boxed causing huge heap allocations (up to 491 MiB per sample in JFR that I 
> examined).
> Stack trace:
>  
> {code:java}
> Stack Trace Count   Percentage void java.lang.Thread.run() 1   100 % void 
> java.lang.Thread.runWith(Object, Runnable) 1   100 % void 
> java.util.concurrent.ThreadPoolExecutor$Worker.run()   1   100 % void 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker)  
>  1   100 % void 
> org.apache.ignite.internal.replicator.ReplicaService$$Lambda.0x0000000800f9c228.run()
>   1   100 % void 
> org.apache.ignite.internal.replicator.ReplicaService.lambda$sendToReplicaRaw$6(CompletableFuture,
>  ErrorReplicaResponse)    1   100 % boolean 
> java.util.concurrent.CompletableFuture.completeExceptionally(Throwable) 1   
> 100 % void java.util.concurrent.CompletableFuture.postComplete()  1   100 % 
> CompletableFuture 
> java.util.concurrent.CompletableFuture$UniHandle.tryFire(int) 1   100 % 
> boolean java.util.concurrent.CompletableFuture.uniHandle(Object, BiFunction, 
> CompletableFuture$UniHandle)   1   100 % Object 
> org.apache.ignite.internal.table.distributed.storage.InternalTableImpl$$Lambda.0x0000000801167068.apply(Object,
>  Object)  1   100 % CompletableFuture 
> org.apache.ignite.internal.table.distributed.storage.InternalTableImpl.lambda$trackingInvoke$13(int,
>  InternalTransaction, int, ReplicaRequest, PendingTxPartitionEnlistment, 
> BiPredicate, Object, Throwable)  1   100 % CompletableFuture 
> org.apache.ignite.internal.table.distributed.storage.InternalTableImpl.trackingInvoke(InternalTransaction,
>  int, Function, boolean, PendingTxPartitionEnlistment, BiPredicate, int)    1 
>   100 % CompletableFuture 
> org.apache.ignite.internal.replicator.ReplicaService.invoke(String, 
> ReplicaRequest)   1   100 % CompletableFuture 
> org.apache.ignite.internal.replicator.ReplicaService.sendToReplica(String, 
> ReplicaRequest)    1   100 % CompletableFuture 
> org.apache.ignite.internal.replicator.ReplicaService.sendToReplicaRaw(String, 
> ReplicaRequest) 1   100 % CompletableFuture 
> org.apache.ignite.internal.network.MessagingService.invoke(String, 
> NetworkMessage, long)  1   100 % CompletableFuture 
> org.apache.ignite.internal.network.wrapper.JumpToExecutorByConsistentIdAfterSend.invoke(String,
>  ChannelType, NetworkMessage, long)    1   100 % CompletableFuture 
> org.apache.ignite.internal.network.DefaultMessagingService.invoke(String, 
> ChannelType, NetworkMessage, long)  1   100 % CompletableFuture 
> org.apache.ignite.internal.network.DefaultMessagingService.invoke0(InternalClusterNode,
>  ChannelType, NetworkMessage, long, boolean)   1   100 % void 
> org.apache.ignite.internal.network.DefaultMessagingService.sendToSelf(NetworkMessage,
>  Long)    1   100 % void 
> org.apache.ignite.internal.replicator.ReplicaManager$$Lambda.0x0000000800486c98.onReceived(NetworkMessage,
>  InternalClusterNode, Long)  1   100 % void 
> org.apache.ignite.internal.replicator.ReplicaManager.onReplicaMessageReceived(NetworkMessage,
>  InternalClusterNode, Long)   1   100 % void 
> org.apache.ignite.internal.replicator.ReplicaManager.handleReplicaRequest(ReplicaRequest,
>  InternalClusterNode, Long)   1   100 % CompletableFuture 
> org.apache.ignite.internal.replicator.ZonePartitionReplicaImpl.processRequest(ReplicaRequest,
>  UUID)   1   100 % CompletableFuture 
> org.apache.ignite.internal.partition.replicator.ZonePartitionReplicaListener.invoke(ReplicaRequest,
>  UUID) 1   100 % CompletableFuture 
> java.util.concurrent.CompletableFuture.thenCompose(Function)  1   100 % 
> CompletableFuture 
> java.util.concurrent.CompletableFuture.uniComposeStage(Executor, Function)    
> 1   100 % Object 
> org.apache.ignite.internal.partition.replicator.ZonePartitionReplicaListener$$Lambda.0x0000000801058000.apply(Object)
>     1   100 % CompletionStage 
> org.apache.ignite.internal.partition.replicator.ZonePartitionReplicaListener.lambda$invoke$0(ReplicaRequest,
>  UUID, ReplicaPrimacy)  1   100 % CompletableFuture 
> org.apache.ignite.internal.partition.replicator.ZonePartitionReplicaListener.processRequest(ReplicaRequest,
>  ReplicaPrimacy, UUID) 1   100 % CompletableFuture 
> org.apache.ignite.internal.partition.replicator.ZonePartitionReplicaListener.processTableAwareRequest(ReplicaRequest,
>  ReplicaPrimacy, UUID)   1   100 % CompletableFuture 
> java.util.concurrent.CompletableFuture.thenCompose(Function)  1   100 % 
> CompletableFuture 
> java.util.concurrent.CompletableFuture.uniComposeStage(Executor, Function)    
> 1   100 % Object 
> org.apache.ignite.internal.partition.replicator.ZonePartitionReplicaListener$$Lambda.0x0000000801072810.apply(Object)
>     1   100 % CompletionStage 
> org.apache.ignite.internal.partition.replicator.ZonePartitionReplicaListener.lambda$processTableAwareRequest$4(ReplicaRequest,
>  ReplicaPrimacy, UUID, Void)  1   100 % CompletableFuture 
> org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener.process(ReplicaRequest,
>  ReplicaPrimacy, UUID)    1   100 % CompletableFuture 
> org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener.processRequestInContext(ReplicaRequest,
>  ReplicaPrimacy, UUID)    1   100 % CompletableFuture 
> org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener.processRequest(ReplicaRequest,
>  ReplicaPrimacy)   1   100 % CompletableFuture 
> org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener.processOperationRequestWithTxOperationManagementLogic(ReplicaRequest,
>  ReplicaPrimacy, HybridTimestamp)   1   100 % CompletableFuture 
> org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener.processOperationRequest(ReplicaRequest,
>  ReplicaPrimacy, HybridTimestamp) 1   100 % CompletableFuture 
> org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener.appendTxCommand(UUID,
>  ZonePartitionId, RequestType, boolean, Supplier)   1   100 % Object 
> org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener$$Lambda.0x000000080114b800.get()
>     1   100 % CompletableFuture 
> org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener.lambda$processOperationRequest$10(ReadWriteSingleRowPkReplicaRequest,
>  ReplicaPrimacy)    1   100 % CompletableFuture 
> org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener.processSingleEntryAction(ReadWriteSingleRowPkReplicaRequest,
>  long)   1   100 % CompletableFuture 
> org.apache.ignite.internal.table.distributed.replicator.PartitionReplicaListener.resolveRowByPk(BinaryTuple,
>  UUID, IgniteTriFunction) 1   100 % Object 
> org.apache.ignite.internal.table.TableImpl$$Lambda.0x00000008010250a8.get()  
> 1   100 % Map 
> org.apache.ignite.internal.table.TableImpl.lambda$indexesLockers$1(int) 1   
> 100 % Integer java.lang.Integer.valueOf(int)  1   100 %{code}
>  
> Probably int map should be used, or field type should be changed from plain 
> int to Integer.
> [1]TableImpl#indexesLockers



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

Reply via email to