Java Terracota Ehcache锁定客户端

Java Terracota Ehcache锁定客户端,java,caching,jboss,ehcache,terracotta,Java,Caching,Jboss,Ehcache,Terracotta,我将Terracotta Enterprise Ehcache与Java应用程序一起使用,但在一天中的某些时候,Terracotta开始花费太多时间来响应put/get请求,有时会锁定客户端线程并启动异常 我的基础设施由一个由5台JBoss服务器6.2.0组成的集群和另一个由4台Terracotta Enterprise Ehcache 3.7.5组成的集群组成,该集群存储了大量数据 该应用程序每天对Terracotta Ehcache进行大约1000万次访问 最初我使用标准,但当问题开始时,

我将Terracotta Enterprise Ehcache与Java应用程序一起使用,但在一天中的某些时候,Terracotta开始花费太多时间来响应put/get请求,有时会锁定客户端线程并启动异常

我的基础设施由一个由5台JBoss服务器6.2.0组成的集群和另一个由4台Terracotta Enterprise Ehcache 3.7.5组成的集群组成,该集群存储了大量数据

该应用程序每天对Terracotta Ehcache进行大约1000万次访问

  • 最初我使用标准,但当问题开始时,我将所有内容都更改为仅使用id搜索

  • 我试图改变DGC间隔,使其更频繁地运行,甚至一天只运行一次,但并没有得到任何改善

  • 我从持久化模式永久存储开始,并尝试更改为仅临时交换,但问题仍然存在

  • 尝试将Terracotta集群更改为使用2台主动机和2台被动机或4台主动机

  • 试图将我的缓存配置为永久正确或错误

  • 我所有的缓存都是不间断的,我尝试将timeoutBehavior用作异常或noop

基本上,我的努力似乎没有产生任何重大的变化,陶土继续进入这种状态,它无法再回答请求

现在唯一能“解决”这个问题的方法就是重启所有的客户端


有没有人在使用Terracotta时有类似的场景,具有这种吞吐量?有什么好主意吗?

是的,我在terracota集群设置中遇到了类似的线程争用问题。从机对get/put的请求通常需要时间,线程转储显示锁定是主要原因。我不记得细节了,因为那是4-6个多月前的事了。当时我有两个选择:

  • 创建一个自己的缓存服务器,它将是一个自定义war,并在下面运行ehcache,并将我自己的put、get、delete等操作公开为REST端点
  • 使用ehcache提供的缓存复制

我首先尝试了复制起诉RMI,然后是JGroups。基于RMI的方法工作得很好,而且非常稳定,所以我决定转向基于RMI的复制,ehcache提供了OOTB。我的设置是使用ehcache作为基于hibernate的JPA和RMI absed解决方案的缓存提供程序,该解决方案运行良好且有效。它足够智能,可以看到集群中的其他服务器何时停机,何时启动。复制是异步和透明的。由于第二种方法很好,我没有尝试第一个。

谢谢你的回答@纳斯古尔,我将尝试更多的赤陶土企业集群,然后再通过RMI更改复制,但我会考虑!