org.infinispan.interceptors.InvocationContextInterceptor:...无法获取

时间:2015-04-24 10:29:43

标签: java locking infinispan timeoutexception

我们在Glassfish(3.1.2)应用程序的多服务器集群中使用infinispan 5.3.0。应用程序让用户处理事件,这些事件存储在infinispan缓存中。

在某些(峰值?)时间内,我们在infinispan日志中看到了很多以下的堆栈跟踪:

2015.04.24_14:41:47,482 - ERROR org.infinispan.interceptors.InvocationContextInterceptor: ISPN000136: Execution error [Thread=http-thread-pool-26861(93)]
org.infinispan.util.concurrent.TimeoutException: Could not acquire lock on 66f2ebb9-cb22-4ba1-be6f-55ca0167cab6 on behalf of transaction GlobalTransaction:<[servername]-30723>:283157:local. Lock is being held by GlobalTransaction:<[servername]-59526>:141148:remote
        at org.infinispan.interceptors.locking.AbstractTxLockingInterceptor.newTimeoutException(AbstractTxLockingInterceptor.java:238)
        at org.infinispan.interceptors.locking.AbstractTxLockingInterceptor.waitForTransactionsToComplete(AbstractTxLockingInterceptor.java:231)
        at org.infinispan.interceptors.locking.AbstractTxLockingInterceptor.lockKeyAndCheckOwnership(AbstractTxLockingInterceptor.java:191)
        at org.infinispan.interceptors.locking.AbstractTxLockingInterceptor.lockAndRegisterBackupLock(AbstractTxLockingInterceptor.java:136)
        at org.infinispan.interceptors.locking.PessimisticLockingInterceptor.visitLockControlCommand(PessimisticLockingInterceptor.java:255)
        at org.infinispan.commands.control.LockControlCommand.acceptVisitor(LockControlCommand.java:132)
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120)
        at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:134)
        at org.infinispan.commands.AbstractVisitor.visitLockControlCommand(AbstractVisitor.java:169)
        at org.infinispan.commands.control.LockControlCommand.acceptVisitor(LockControlCommand.java:132)
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120)
        at org.infinispan.interceptors.TxInterceptor.invokeNextInterceptorAndVerifyTransaction(TxInterceptor.java:130)
        at org.infinispan.interceptors.TxInterceptor.visitLockControlCommand(TxInterceptor.java:189)
        at org.infinispan.commands.control.LockControlCommand.acceptVisitor(LockControlCommand.java:132)
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120)
        at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:134)
        at org.infinispan.commands.AbstractVisitor.visitLockControlCommand(AbstractVisitor.java:169)
        at org.infinispan.statetransfer.TransactionSynchronizerInterceptor.visitLockControlCommand(TransactionSynchronizerInterceptor.java:97)
        at org.infinispan.commands.control.LockControlCommand.acceptVisitor(LockControlCommand.java:132)
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120)
        at org.infinispan.statetransfer.StateTransferInterceptor.handleTopologyAffectedCommand(StateTransferInterceptor.java:216)
        at org.infinispan.statetransfer.StateTransferInterceptor.handleTxCommand(StateTransferInterceptor.java:189)
        at org.infinispan.statetransfer.StateTransferInterceptor.visitLockControlCommand(StateTransferInterceptor.java:131)
        at org.infinispan.commands.control.LockControlCommand.acceptVisitor(LockControlCommand.java:132)
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120)
        at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:134)
        at org.infinispan.commands.AbstractVisitor.visitLockControlCommand(AbstractVisitor.java:169)
        at org.infinispan.commands.control.LockControlCommand.acceptVisitor(LockControlCommand.java:132)
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120)
        at org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:128)
        at org.infinispan.interceptors.InvocationContextInterceptor.visitLockControlCommand(InvocationContextInterceptor.java:97)
        at org.infinispan.commands.control.LockControlCommand.acceptVisitor(LockControlCommand.java:132)
        at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:343)
        at org.infinispan.CacheImpl.lock(CacheImpl.java:672)
        at org.infinispan.DecoratedCache.lock(DecoratedCache.java:139)


2015.04.24_14:46:39,010 - ERROR org.infinispan.remoting.InboundInvocationHandlerImpl: Exception executing command [Thread=remote-thread-13]
org.infinispan.util.concurrent.TimeoutException: Could not acquire lock on [event-lock-id>] on behalf of transaction GlobalTransaction:<[servername]-37484>:26400:remote. Lock is being held by null
        at org.infinispan.interceptors.locking.AbstractTxLockingInterceptor.newTimeoutException(AbstractTxLockingInterceptor.java:238)
        at org.infinispan.interceptors.locking.AbstractTxLockingInterceptor.waitForTransactionsToComplete(AbstractTxLockingInterceptor.java:231)
        at org.infinispan.interceptors.locking.AbstractTxLockingInterceptor.lockKeyAndCheckOwnership(AbstractTxLockingInterceptor.java:191)
        at org.infinispan.interceptors.locking.AbstractTxLockingInterceptor.lockAndRegisterBackupLock(AbstractTxLockingInterceptor.java:136)
        at org.infinispan.interceptors.locking.PessimisticLockingInterceptor.visitLockControlCommand(PessimisticLockingInterceptor.java:255)
        at org.infinispan.commands.control.LockControlCommand.acceptVisitor(LockControlCommand.java:132)
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120)
        at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:134)
        at org.infinispan.commands.AbstractVisitor.visitLockControlCommand(AbstractVisitor.java:169)
        at org.infinispan.commands.control.LockControlCommand.acceptVisitor(LockControlCommand.java:132)
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120)
        at org.infinispan.interceptors.TxInterceptor.invokeNextInterceptorAndVerifyTransaction(TxInterceptor.java:130)
        at org.infinispan.interceptors.TxInterceptor.visitLockControlCommand(TxInterceptor.java:189)
        at org.infinispan.commands.control.LockControlCommand.acceptVisitor(LockControlCommand.java:132)
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120)
        at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:134)
        at org.infinispan.commands.AbstractVisitor.visitLockControlCommand(AbstractVisitor.java:169)
        at org.infinispan.statetransfer.TransactionSynchronizerInterceptor.visitLockControlCommand(TransactionSynchronizerInterceptor.java:94)

有人知道造成这些错误的原因或任何进一步分析的指针吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

Infinispan使用分布式锁来同步缓存修改。其原因与同步对变量的多线程访问相同。在高峰时段,锁争用变得太高,并且一些锁获取尝试超时。考虑增加锁定获取超时或配置锁定条带化。有关详细信息,请参阅Infinispan用户指南:5. Locking and Concurrency