[英]SingleKeyBackupWriteCommand run out of memory
Our System has 8 nodes(vm in openstack) to run infinispan.我们的系统有 8 个节点(openstack 中的 vm)来运行 infinispan。 It works well at beginning.它在开始时运作良好。 However, 7 days later, the SingleKeyBackupWriteCommands run out of one node's memory in 4 hours(Others' memory are fine.).然而,7天后,SingleKeyBackupWriteCommands在4小时内耗尽了一个节点的内存(其他人的内存没问题。)。 Does Anyone know what's the problem that make infinispan just receives the cmd but never execute them?有谁知道使 infinispan 只接收 cmd 但从不执行它们的问题是什么?
num #instances #bytes class name
----------------------------------------------
1: 16830203 13201657008 [B
2: 29186377 3822907360 [C
3: 20916364 1505978208 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask
4: 30043274 721038576 java.lang.String
5: **5750667** 506058696 org.infinispan.commands.triangle.SingleKeyBackupWriteCommand
base on the TriangleSequencer's logic基于 TriangleSequencer 的逻辑
If any issue happens once in sender side/Network side, the receiver side will never execute any subsequent cmd.如果在发送方/网络方发生任何问题,接收方将永远不会执行任何后续 cmd。 It's very fragile logic in TriangleOrderManager. TriangleOrderManager 中的逻辑非常脆弱。
enter image description here在此处输入图片说明
private synchronized boolean isNext(int commandTopologyId, long sequenceNumber) {
if (receiverTopologyId == commandTopologyId) {
if (trace)
{ log.tracef("Receiver old topology. Current sequence (%s:%s), command sequence (%s:%s)", receiverTopologyId, receiverSequenceNumber, commandTopologyId, sequenceNumber); }
**return receiverSequenceNumber == sequenceNumber;**
} else if (receiverTopologyId < commandTopologyId) {
//update topology. this command will be the first
if (trace)
{ log.tracef("Receiver update topology. CommandTopologyId=%s, command sequence=%s", commandTopologyId, sequenceNumber); }
receiverTopologyId = commandTopologyId;
receiverSequenceNumber = 1;
return 1 == sequenceNumber;
} else {
if (trace)
{ log.tracef("Receiver old topology. Current sequence (%s:%s), command sequence (%s:%s)", receiverTopologyId, receiverSequenceNumber, commandTopologyId, sequenceNumber); }
//this topology is higher than the command topology id.
//another topology was installed. this command will fail with OutdatedTopologyException.
return true;
}
}
More details can be found in https://issues.redhat.com/browse/ISPN-12435更多细节可以在https://issues.redhat.com/browse/ISPN-12435 中找到
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.