Java JBoss EAP 6.1的Infinispan超时异常

Java JBoss EAP 6.1的Infinispan超时异常,java,hibernate,caching,jboss,infinispan,Java,Hibernate,Caching,Jboss,Infinispan,这件事快把我逼疯了。我越来越 在随机点出现的例外情况如下: ISPN000136: Execution error: org.infinispan.util.concurrent.TimeoutException: Unable to acquire lock after [60 seconds] on key [com.acme.entity.EntityA#9073] for requestor [GlobalTransaction:<null>:9593:local]! Loc

这件事快把我逼疯了。我越来越 在随机点出现的例外情况如下:

ISPN000136: Execution error: org.infinispan.util.concurrent.TimeoutException: Unable to acquire lock after [60 seconds] on key [com.acme.entity.EntityA#9073] for requestor [GlobalTransaction:<null>:9593:local]! Lock held by [GlobalTransaction:<null>:9580:local]
在我们的infinispan.xml文件中,我们有:

 <namedCache name="Acme.cache.StandardEntity">
      <eviction strategy="LRU" maxEntries="1000"/>
      <expiration maxIdle="3600" lifespan="3600" wakeUpInterval="7200000"/>
   </namedCache>

infispan.xml文件是几年前我们从EH缓存迁移时使用的工具创建的。唤醒间隔看起来相当高。这可能是个问题吗? 我不确定namedCache是否配置正确。它是否需要以Acme(本例中的应用程序名称)作为前缀。如何测试这些命名缓存是否实际被使用。对于standalone.xml文件中需要配置什么以及infinispan.xml文件中需要配置什么,我有点困惑

配置中是否仍有我可以尝试解决此问题的内容

如果不是,我怎么才能知道是谁“锁上了门”(获得了锁)。我可以看到线程试图打开门(试图获取锁)和抱怨(抛出异常),但我看不到是谁首先锁上的。如果我能看到谁把锁握了这么久,我也许能把它修好

在本地,我可以为此启用日志记录

 <logger category="org.infinispan.util.concurrent.locks">
                <level name="TRACE"/>
 </logger>

但我不能在生产中真正做到这一点(太多的日志记录)。然而,在本地我无法复制它。还有什么办法可以找出哪个线程获得了锁

欢迎提出任何意见


谢谢

看来您的锁有并发访问问题。我建议使用悲观锁定来避免此问题,它会增加资源,但在这些情况下会有所帮助:

/subsystem=infinispan/cache-container=web/local-cache=persistent/transaction=TRANSACTION/:add(locking=PESSMISTIC)

关于
infinispan.xml
:此文件仅适用于Red Hat Data GRid(JDG、RHDG)嵌入式模式(或社区infinispan版本)。对于EAP 6.1,您需要使用
独立ha
独立完整ha
配置文件来设置缓存属性。

悲观锁定是否会让情况变得更糟?这不会改变多个线程试图获得锁的事实,但如果我理解正确,吞吐量会更差。那么你能解释一下为什么这会改善它吗?谢谢
 <logger category="org.infinispan.util.concurrent.locks">
                <level name="TRACE"/>
 </logger>
/subsystem=infinispan/cache-container=web/local-cache=persistent/transaction=TRANSACTION/:add(locking=PESSMISTIC)