Terracotta Ehcache锁定客户端

时间:2014-12-03 17:18:17

标签: java caching jboss ehcache terracotta

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

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

该应用程序每天大约有1000万次访问Terracotta Ehcache。

  • 最初我使用了标准,但是,当问题开始时,我改变了一切只使用id搜索。

  • 我试图更改DGC间隔,让它更频繁地运行,甚至每天运行一次,但它没有变得更好。

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

  • 尝试将Terracotta群集更改为使用2台活动计算机和2个活动计算机或4个活动计划。

  • 试图将我的缓存配置为永恒的真假。

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

基本上我的努力似乎没有产生任何重大变化,并且兵马俑继续进入这个状态,它不能再回答这些要求了。

现在唯一可以解决问题的是#34;问题是重新启动所有客户端。

有没有人使用Terracotta有类似的情况,有这种吞吐量?现在想去哪里的想法?

1 个答案:

答案 0 :(得分:0)

是的,我在terracota群集设置上面临类似的线程争用问题。奴隶请求get / put用于花费时间,并且线程转储显示锁定是主要原因。我不记得细节,因为它超过4-6个月。我有两个选择:

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

我首先尝试使用RMI复制,然后使用JGroups。基于RMI的方法运行良好并且非常稳定,因此我决定转向基于RMI的复制,ehcache提供OOTB。我的设置是使用ehcache作为基于hibernate的JPA的缓存提供程序,RMI absed解决方案非常有效。它非常智能,可以看到群集中的其他服务器何时出现故障以及何时出现故障。复制是异步和透明的。由于第二种方法运作良好,我没有尝试第一种方法。